我有一些文件看起来像这样的十六进制/八进制转储:
hexdump文件:
quos()
od file:
0000000 0002 0000 0c3e 0000 0ac5 0000
000000c
我真的不知道这个“000002”和“0000014”有什么好处但是,我知道我需要这个“006076”和“005305”作为整数值,所以我在python2中这样做了:
0000000 000002 000000 006076 000000 005305 000000
0000014
我真的不知道我应该如何在python2中打开/读取这个文件/值...
简单打开/读取文件如下所示:
hex(006076)
'0xc3e'
int(0xc3e)
3134
答案 0 :(得分:3)
您想使用struct.unpack
。
>>> import struct
>>> struct.unpack("4x H 2x H 2x", '\x02\x00\x00\x00>\x0c\x00\x00\xc5\n\x00\x00')
(3134, 2757)
用作第一个参数的格式字符串告诉unpack
忽略前4个字节,然后将后两个字节解压缩为整数,忽略2个字节,解压缩另一个2字节整数,并忽略最后一个2个字节。这假设字节字符串使用与机器默认值相同的字节序;有关详细信息,请参阅struct
模块的文档。
答案 1 :(得分:0)
函数hex(int)
和oct(int)
取基数为10(十进制)的整数,并将其转换为字符串,该字符串看起来像基数8或基数16(十六进制或八进制)中的数字。函数int()
只接受一个看起来像数字的字符串,并将其从字符串转换为基数为10的整数。
您应该能够使用int()
函数以int([string representing number], [base of number])
格式执行此操作。以下是它的工作原理:
在基数n系统中,数字的值为(1st digit) * n^0 + (2nd digit) * n^1 + (3rd digit) ^ n^2 + ...
。例如,如果您的八进制数为472(基数为8),则可以像这样计算值:
2 * 8^0 + 7 * 8^1 + 4 * 8^2
2 * (1) + 7 * (8) + 4 * (64)
2 + 56 + 256
314
因此,八进制中的472相当于小数的314。为了实现这个功能,我会做这样的事情:
def convertToDecimal(number, baseOfNumber):
counter = 0
for c in reversed(number)
newNumber += (c * (baseOfNumber ^ counter))
counter += 1
return newNumber
希望这有帮助!