Python 读取二进制数据(字节顺序)

Python 读取二进制数据(字节顺序),python,Python,我对如何从下面描述的文件中读取二进制数据感到困惑。描述如何创建此数据的文档说明如下: 有一个“日志文件记录的开始”,其格式是这样的,即有一条以ctrl-Z“0x1a”(DOS/Windows文件结束)、ctrl-D“0x04”(Unix文件结束)和null“0x00”(根据设计文件的顺序)结尾的明文消息 然后是值0x12345678(长度为4字节,允许任意解码器确定字节存储顺序) 之后是数据的主要部分 读取此文件的我的代码: f = open(filename, 'rb') while True

我对如何从下面描述的文件中读取二进制数据感到困惑。描述如何创建此数据的文档说明如下:

有一个“日志文件记录的开始”,其格式是这样的,即有一条以ctrl-Z“0x1a”(DOS/Windows文件结束)、ctrl-D“0x04”(Unix文件结束)和null“0x00”(根据设计文件的顺序)结尾的明文消息

然后是值0x12345678(长度为4字节,允许任意解码器确定字节存储顺序)

之后是数据的主要部分

读取此文件的我的代码:

f = open(filename, 'rb')
while True:
    byte = f.read(1)
    if byte.encode('hex') == '1a':            #  ctrl-z
        if s[i+1].encode('hex') == '04':      #  ctrl-D
            if s[i+2].encode('hex') == '00':  #  null
                print s[i:i+8].encode('hex')
                break
打印>>
1a04007856341200

如您所见,
0x12345678
隐藏在其中。我从研究中了解到,这意味着数据存储在“小端”。我的工具现在(我觉得)让事情变得比我需要的更困难。例如,下面的代码选择文件创建的年份(YYYY)

i = year_location_in_file  # just a pointer

created_year = struct.unpack('<cc', s[i:i+2])
print 'created_year as hex:', created_year

created_year = int(''.join([e for e in created_year][::-1]).encode('hex'), 16)
print 'created year as int:', created_year
i=year_location_in_file#只是一个指针

created_year=struct.unpack(“我认为您的问题在于将
c
用作
struct.unpack
的代码,而不是较大的类型。
c
是一个字符,只有一个字节长(这意味着字节顺序无关紧要)。相反,使用
h
表示两字节短整数,或使用
l
表示四字节长整数(如果需要无符号值,请使用大写字母)

year_data=b“\x77\x07”#从二进制文件切片的字节

year=struct.unpack(“我不想事先感谢你,我更想要一个'?'来了解重点。我甚至尝试了Ctrl+F和“problem”。都找不到。结尾的二进制内容应该代表什么?显示13个字节(结尾有一个额外的反斜杠),但您并没有说应该如何解释它们。@Blckknght这是上述print语句的结果。我只是想说明我要查找的值(0x12345678)在其中是xV4\x12\
year_data = b"\x77\x07"                        # bytes sliced from the binary file
year = struct.unpack("<h", year_data)          # unpacked to int in one go