Python 将二进制文件读入不同的十六进制;“类型”;(8位,16位,32位,…)

Python 将二进制文件读入不同的十六进制;“类型”;(8位,16位,32位,…),python,binaryfiles,Python,Binaryfiles,我有一个包含二进制数据的文件。这个文件的内容只有一行 示例:01010100001110101010101 内容是一个C++对象数组,具有以下数据类型: // Care pseudo code, just for visualisation int64 var1; int32 var2[50]; int08 var3; 我想跳过var1和var3,只将var2的值提取为一些可读的十进制值。我的想法是逐字节读取文件并将其转换为十六进制值。在下一步中,我想我可以“组合”(附加)这些十六进制值中的

我有一个包含二进制数据的文件。这个文件的内容只有一行
示例:
01010100001110101010101

内容是一个C++对象数组,具有以下数据类型:

// Care pseudo code, just for visualisation
int64 var1;
int32 var2[50];
int08 var3;
我想跳过
var1
var3
,只将
var2
的值提取为一些可读的十进制值。我的想法是逐字节读取文件并将其转换为十六进制值。在下一步中,我想我可以“组合”(附加)这些十六进制值中的4个,得到一个
int32
值。
示例:
0x10 0xAA 0x00 0x50->0x10AA050


到目前为止,我的代码是:

def append_hex(a, b):
    return (a << 4) | b

with open("file.dat", "rb") as f:
    counter = 0
    tickdifcounter = 0
    current_byte=" "
    while True:
        if (counter >= 8) and (counter < 208):
            tickdifcounter+=1
            if (tickdifcounter <= 4):
                current_byte = append_hex(current_byte, f.read(1))
                if (not current_byte):
                    break
                val = ord(current_byte)
        if (tickdifcounter > 4):
            print hex(val)
            tickdifcounter = 0
            current_byte=""
        counter+=1
        if(counter == 209):    #209 bytes = int64 + (int32*50) + int08
            counter = 0
    print
def append_hex(a,b):
返回(a=8)和(计数器<208):
tickdifcounter+=1
如果(勾选数字4):
打印十六进制(val)
tickdifcounter=0
当前字节=“”
计数器+=1
如果(计数器==209):#209字节=int64+(int32*50)+int08
计数器=0
打印
现在我的问题是我的
append\u hex
不起作用,因为变量是字符串,所以位移位不起作用

我是python新手,所以当我能以更好的方式做一些事情时,请给我一些提示。

您可以使用struct module读取二进制文件


这可以帮助您使用该方法将字符转换为int。为了获得多字节数的整数值,请向左移位。例如,来自早期项目:

def parseNumber(string, index):
    return ord(string[index])<<24 + ord(string[index+1])<<16 + \
           ord(string[index+2])<<8+ord(string[index+3])
def parseNumber(字符串,索引):
返回ord(字符串[索引])