Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解包二进制数据,长度为12的数字_Python_Struct_Binaries - Fatal编程技术网

Python解包二进制数据,长度为12的数字

Python解包二进制数据,长度为12的数字,python,struct,binaries,Python,Struct,Binaries,我有一个包含big-endian二进制文件的文件。有两个数字字段。第一个长度为8,第二个长度为12。我怎样才能解开这两个号码 我使用的是Python模块struct(),它适用于第一个字段 num1 = struct.unpack('>Q',payload[0:8]) 但我不知道如何打开第二个号码。如果将其视为char(12),则会得到类似于'\x00\xe3AC\x00\x00\x00\x06\x00\x00\x00\x00\x01'的内容 谢谢 我认为您应该为第二个长度为16的数字创

我有一个包含big-endian二进制文件的文件。有两个数字字段。第一个长度为8,第二个长度为12。我怎样才能解开这两个号码

我使用的是Python模块struct(),它适用于第一个字段

num1 = struct.unpack('>Q',payload[0:8])
但我不知道如何打开第二个号码。如果将其视为char(12),则会得到类似于
'\x00\xe3AC\x00\x00\x00\x06\x00\x00\x00\x00\x01'
的内容


谢谢

我认为您应该为第二个长度为16的数字创建一个新的字节字符串,用保存您的数字的字节字符串填充最后12个字节,用零填充前4个字节

然后用unpack以
>QQ
格式解码bytestring,比如对
numHI
numLO
变量进行解码。然后,您将得到最后一个数字:
number=numHI*2^64+numLO
*。AFAIR Python中的整数可以(几乎)任意大,因此不会出现溢出问题。这只是一个粗略的想法,如果您在用实际Python代码编写时遇到问题,请发表评论,然后我将编辑我的答案以提供更多帮助


*^在这种情况下是数学能力,所以请使用math.pow。或者,您可以使用byte shift:
number=numHI它是存储在12个字节上的数字吗?很抱歉,有两个数字需要解包,一个长度为8,另一个长度为12。num1我可以如上所述打开包装。我和第二个有麻烦。我正在寻找struct.unpack(x,payload[8:20])的第一个参数x。糟糕的是,我误读了这个问题(并删除了一条我因此输入的错误注释),您是否尝试将其视为三个整数?:
struct.unpack('>hhh',payload[8:20])
这样做会得到什么?“>hhh”给出struct.error:unpack需要长度为6的字符串参数。当我将其更改为“>hhhhh”,则“\x00\xe3AC\x00\x00\x00\x08\x00\x00\x00\x01”变为(22716707,0,8,0,1)。但我认为应该是一个单一的数字。我认为这是有效的!从string='\x00\xe3AC\x00\x00\x00\x08\x00\x00\x00\x01'开始,我创建了x='0000'+字符串,然后我解包numHI,numLO=unpack('>QQ',x)。使用上面的公式,我得到的数字是6944656625227956935。不幸的是,我现在无法检查这个数字是否正确。我很高兴。另外,我还做了一个小编辑,你可以用字节移位代替电源:)谢谢你的帮助。有一件事
number=numHI*2^64+numLO
number=numHI快得多这很奇怪,我会说二进制运算更快:)。我大体上同意。虽然我的机器有故障