Sorry, you're wrong. See my code again:
The first swap16 call gets "x and $ffff", and the result of it will shifted 16 bits to left, which's correct.Code:function Swap32(x:word):word; begin result:=(Swap16(x and $ffff) shl 16) or Swap16((x and $ffff0000) shr 16); end;
The second swap16 call gets "(x and $ffff0000) shr 16" or short "x shr 16", and the result of it will not shifted because it was already shifted 16 bits to right, which's also correct.
I guess, you had simply overlook the correct nested levels of the (...) blocks in my code.
Bookmarks