我有一个整数:
target = 0xd386d209
print hex(target)
我该如何打印出这个整数的第n个字节?例如,获取第一个字节的期望输出为:
0x09
您可以通过位运算来完成此操作。为整个字节创建一个位掩码,然后将该掩码位移所需的字节数。使用二进制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)
def byte(number, i):
return (number & (0xff << (i * 8))) >> (i * 8)
>>> 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'
这只涉及一些简单的二进制操作。
>>> target = 0xd386d209
>>> b = 1
>>> hex((target & (0xff << b * 8)) >> b * 8)
'0x9'
>>> hex((target & (0xff << b * 8)) >> b * 8)
'0xd2'
print hex(0x000000FF & target)
- Juicy'{:02x}'.format( (target >> (8*n)) & 0xff )
而不是使用hex
,这样当前导半字节为零时,可以得到前导零(如09
)。 - hiro protagonist