我无法理解这个位操作 python 代码
i cant understand this bit-manipulation python code
我在逆向工程文章中看到了很多代码模式,但我并不像这篇那样理解
(some_value >> 8) & 0xff
谁能解释一下?
您不需要了解寄存器级别的内容。只需将 int
视为 int
。
当你取一个整数,比如 0x12345678
并将其右移 8 位时会发生什么?
好吧,让我们看看:
>>> hex(0x12345678 >> 8)
'0x123456'
你已经敲掉了最右边的两个数字——也就是最右边的字节——因为一个字节是 8 位。
现在如果你 bitwise-and 它与 0xff
会发生什么?
>>> hex(0x123456 & 0xff)
'0x56'
除了最右边的两个数字,你已经删除了所有内容——也就是说,除了最后一个字节之外的所有内容——因为0xff
是一个完整的字节1
位。
放在一起:
>>> hex((0x12345678 >> 8) & 0xff)
'0x56'
所以你得到的是倒数第二个字节。
并且您可以通过这种方式提取 int 的每个字节:
>>> hex((0x12345678 >> 0) & 0xff)
'0x78'
>>> hex((0x12345678 >> 8) & 0xff)
'0x56'
>>> hex((0x12345678 >> 16) & 0xff)
'0x34'
>>> hex((0x12345678 >> 24) & 0xff)
'0x12'
>>> hex((0x12345678 >> 32) & 0xff)
'0x00'
我在逆向工程文章中看到了很多代码模式,但我并不像这篇那样理解
(some_value >> 8) & 0xff
谁能解释一下?
您不需要了解寄存器级别的内容。只需将 int
视为 int
。
当你取一个整数,比如 0x12345678
并将其右移 8 位时会发生什么?
好吧,让我们看看:
>>> hex(0x12345678 >> 8)
'0x123456'
你已经敲掉了最右边的两个数字——也就是最右边的字节——因为一个字节是 8 位。
现在如果你 bitwise-and 它与 0xff
会发生什么?
>>> hex(0x123456 & 0xff)
'0x56'
除了最右边的两个数字,你已经删除了所有内容——也就是说,除了最后一个字节之外的所有内容——因为0xff
是一个完整的字节1
位。
放在一起:
>>> hex((0x12345678 >> 8) & 0xff)
'0x56'
所以你得到的是倒数第二个字节。
并且您可以通过这种方式提取 int 的每个字节:
>>> hex((0x12345678 >> 0) & 0xff)
'0x78'
>>> hex((0x12345678 >> 8) & 0xff)
'0x56'
>>> hex((0x12345678 >> 16) & 0xff)
'0x34'
>>> hex((0x12345678 >> 24) & 0xff)
'0x12'
>>> hex((0x12345678 >> 32) & 0xff)
'0x00'