我无法理解这个位操作 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'