获取整数的第n个字节

9

我有一个整数:

target = 0xd386d209
print hex(target)

我该如何打印出这个整数的第n个字节?例如,获取第一个字节的期望输出为:

0x09

1
你会如何手动完成它? - Karl Knechtel
@KarlKnechtel 谢谢,这正是我需要的提示... print hex(0x000000FF & target) - Juicy
最好使用'{:02x}'.format( (target >> (8*n)) & 0xff )而不是使用hex,这样当前导半字节为零时,可以得到前导零(如09)。 - hiro protagonist
4个回答

13

您可以通过位运算来完成此操作。为整个字节创建一个位掩码,然后将该掩码位移所需的字节数。使用二进制AND掩码字节,最后将结果重新位移回第一个位置:

target = 0xd386d209
byte_index = 0
mask = 0xFF << (8 * byte_index)
print hex((target & mask) >> (8 * byte_index))

如果首先将输入的数字进行移位,您可以简化它。然后您就不需要对 mask 值进行位移操作:

target = 0xd386d209
byte_index = 0
mask = 0xFF
print hex((target >> (8 * byte_index)) & mask)

我认为变量 bit_index 应该重命名为 byte_index 或其他类似名称,以使其更清晰,因为我们正在使用此变量表示第 nth 个字节。 - Imtiaj Sreejon

2
def byte(number, i):
    return (number & (0xff << (i * 8))) >> (i * 8)

1
>>> def print_n_byte(target, n):
...     return hex((target&(0xFF<<(8*n)))>>(8*n))
... 
>>> print_n_byte(0xd386d209, 0)
'0x9L'
>>> print_n_byte(0xd386d209, 1)
'0xd2L'
>>> print_n_byte(0xd386d209, 2)
'0x86L'

0

这只涉及一些简单的二进制操作。

>>> target = 0xd386d209
>>> b = 1
>>> hex((target & (0xff << b * 8)) >> b * 8)
'0x9'
>>> hex((target & (0xff << b * 8)) >> b * 8)
'0xd2'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接