[MEGOLDVA] C to Perl

Adott az alábbi C rutin:

R_API ut16 r_hash_xorpair(const ut8 *a, ut64 len) {
ut16 result = 0, *b = (ut16 *)a;
for (len>>=1; len--; b++)
result ^= *b;
return result;
}

A funkcióját kellene megvalósítani Perl-ben. Az a baj, hogy mindkét nyelvhez eléggé süket vagyok. Ha jól olvasom a C rutint, akkor az uint16-onként végigolvas tömöt, össze xor-ozza és kész a result.

Az alábbit okoskodtam ki, de nem azt csinálja amit kellene:

$hash ^= $_ for unpack("(S)*",$buffer);

Please Help!

Hozzászólások

A hossz mindig paros? A C kod szerint az utolsot kihagyja, ha egyedul marad. Perlt nem ismerem ilyen szinten. Amugy trukkozes nelkul nem tudod ugyanezt leirni Perlben? Szoval venni egy (mondjuk byte) tombot, kettesevel vegiglepkedni rajta, es osszexorolni?

--
Is that a banana in your pocket, or are you just happy to see me?
Neither, it's my new iPhone.

Nem cserelodot fel valahol az endianess ?
unpack("(n)*",$buffer)

Biztos nincs $hash -ban valami korabbi ertek? Mindig nullazod ?

A bufferbe kello szamu byte kerul, A C kod is mindig a teljes buffert nezi ?

Amit nem lehet megirni assemblyben, azt nem lehet megirni.

Esetleg készíts rá tesztet: ugyanarra az input vektorra ugyanazt az eredményt kell adnia a C és a Perl kódnak is.
Ha mindenféle csillagállás esetén jónak tűnik a Perl megvalósítás, akkor kicsi a kockázata, hogy mégis rossz.

Fuszenecker Róbert