Thread C Funktion in perl umsetzen
(16 answers)
Opened by piet at 2015-02-11 13:03 Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 use integer; my @uha = qw(1 2 3 4 2 4 6 0 12); # Uint8 Array say normalChecksum(@uha, scalar @uha); # 33 say simpleChecksum(@uha); # 33 # von c nach Perl sub normalChecksum{ my $n = pop @_; my ($i,$a,$bb); for($i = 1, $a = 0; $i < $n; $i++){ $a += $_[$i]; } $bb = $a / 255; $a = ($a - 256 * $bb) + $bb; $bb = $a / 256; return ($a-256*$bb) + $bb; } # Vereinfachung mit pack sub simpleChecksum{ my @uha = @_; return unpack("%C*", pack "C*", @uha) - 1; } PS: Mein gcc kennt uint8 nicht, ich habe deswegen int verwendet und das für Dich mal getestet: Code: (dl
)
1 #include <stdio.h> Das Ergebnis ist, wie mit obenstehenden Perl-Code und den Beispielzahlen => 33 Die Zahlen in der Liste werden einfach nur aufsummiert und zum Schluss wird 1 abgezogen. Am Einfachsten ist diese Art der Checksummenerzeugung mit pack/unpack. Last edited: 2015-02-12 08:22:24 +0100 (CET) |