ich hab's mal etwas zerlegt
Delphi-Quellcode:
Result :=
Format('%.2x%.2x%.2x%.2x', [(h0 {shr 0}) mod 256,
(h0 shr 8) mod 256, (h0 shr 16) mod 256, (h0 shr 24) mod 256])
+ Format('%.2x%.2x%.2x%.2x', [(h1 {shr 0}) mod 256,
(h1 shr 8) mod 256, (h1 shr 16) mod 256, (h1 shr 24) mod 256])
+ Format('%.2x%.2x%.2x%.2x', [(h2 {shr 0}) mod 256,
(h2 shr 8) mod 256, (h2 shr 16) mod 256, (h2 shr 24) mod 256])
+ Format('%.2x%.2x%.2x%.2x', [(h3 {shr 0}) mod 256,
(h3 shr 8) mod 256, (h3 shr 16) mod 256, (h3 shr 24) mod 256]);
Delphi-Quellcode:
Result :=
Format('%.2x%.2x%.2x%.2x', [h0 mod 256,
(h0 div 256) mod 256, (h0 div 65536) mod 256, (h0 div 16777216) mod 256])
+ Format('%.2x%.2x%.2x%.2x', [h1 mod 256,
(h1 div 256) mod 256, (h1 div 65536) mod 256, (h1 div 16777216) mod 256])
+ Format('%.2x%.2x%.2x%.2x', [h2 mod 256,
(h2 div 256) mod 256, (h2 div 65536) mod 256, (h2 div 16777216) mod 256])
+ Format('%.2x%.2x%.2x%.2x', [h3 mod 256,
(h3 div 256) mod 256, (h3 div 65536) mod 256, (h3 div 16777216) mod 256]);
im Grunde besteht doch LongWord aus 4 Byte
also "shr 0" ist wirklich sinnlos ... aber ab es dringelassen, damit alles "gleich" berechnet wird.
and $ff sorgt dafür, daß nur das niederwertigste Byte im Ergebnis steht.
also wäre das "and $ff" im Susammenhanb mit "shr 24" sinnlos, da dort das höherwertigste Byte an die niederwertigste Stelle verschoben wurde und es somit nix höheres mehr gibt.
Bei IntToHex wird der Wert $00112233 auch so ausgegeben, aber eigentlich müßte es 33221100 sein, da das niederwertigste Byte zuerst kommen muß.
Mit BinToHex würde es richtig dargestellt.
wenn du in meine, von mir mal verlinkten, "optimierteren" Version reinschaust, dann könnte man entdecken, daß ich da sozusagen h0 bis h4 zusammen in einem Array hintereinander hab ... somit kann ich diese alle zusammen/auf_einmal über BinToHex ('ne eigene Version) umwandeln