当我使用python的struct.pack方法时,我得到了一个奇怪的结果。 代码如下所示:
>>> struct.pack('<i', 0x01d1f23a)
我想要获得的结果是将十六进制地址转换为小端(“&lt;”)。 编辑: 相当于Perl(对不起打印,不知道perl)
#!/usr/bin/perl
my $eip = pack('V',0x01ccf23a);
print "$eip[0]";
print "$eip[1]";
print "$eip[2]";
print "$eip[3]";
结果是:582422041
我需要用python实现相同的结果。
答案 0 :(得分:1)
一切似乎都很好:
>>> struct.pack('<i', 0x01d1f23a)
b':\xf2\xd1\x01'
最高有效字节01
存储在最高内存地址,因此只提供小端。我唯一注意到的是b'\x3a'
看起来像:
,因为它是一个有效的ASCII符号。
如果答案没有解决您的问题,请更新您的帖子并附上详细信息。
修改强>
为了将数字表示为十六进制形式的字节序列,而不转换为ASCII,请使用以下行:
>>> ' '.join(hex(b) for b in struct.pack('<i', 0x01d1f23a))
'0x3a 0xf2 0xd1 0x1'
使用str
代替hex
获取小数表示。
>>> ' '.join(str(b) for b in struct.pack('<i', 0x01d1f23a))
'58 242 209 1'