我正在阅读关于大而小endianness的非常有趣的课程。伪代码示例解释了如何将longInt(4字节)从big endian转换为little endian或反向事物。
Function Reverse (N:LongInt) : LongInt ;
Var B0, B1, B2, B3 : Byte ;
Begin
B0 := (N AND $000000FF) SHR 0 ;
B1 := (N AND $0000FF00) SHR 8 ;
B2 := (N AND $00FF0000) SHR 16 ;
B3 := (N AND $FF000000) SHR 24 ;
Reverse := (B0 SHL 24) OR (B1 SHL 16) OR (B2 SHL 8) OR (B3 SHL 0) ;
End ;
代码就是这样,我在使用十六进制表示的第一行遇到麻烦。他们如何通过这样做提取第一个字节
B0 := (N AND $000000FF) SHR 0 ;
?操作是什么
N AND $000000FF
办?
我看到AND对二进制表示有什么作用,但是十六进制表示呢?对于下一行,我的惊讶完全一样。
谢谢和问候。
答案 0 :(得分:1)
十六进制数字相当于4个连续的二进制数字,例如C
< ==> 1100
。按位运算在等效的二进制表示上运行。