如何从二进制文件中获取整数值

时间:2017-05-26 13:20:04

标签: python

我有一些文件看起来像这样的十六进制/八进制转储:

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

2 个答案:

答案 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

希望这有帮助!