我有一个Perl脚本,该脚本创建一个二进制输入文件,然后将其传递给另一组代码。二进制输入文件由数百个不同长度的参数组成。大多数为8位,16位或32位。我正在尝试将Perl脚本转换为Python,而令我困扰的是一些24位长的参数。
我看着this forum post,距离很近,但不是我所需要的。
例如。假设输入值为整数(10187013)。如何将其压缩为3个字节?如果我做这样的事情:
hexVars = struct.pack("<L", 10187013)
然后将其写到二进制文件中:
binout = open(binFile, "wb")
binout.write(hexVars)
它按预期方式打印出四个字节05 71 9b 00
,我想要的是05 71 9b
。我可以强制它仅压缩3个字节吗?还是以某种方式在写出最后一个字节之前将其删除?
答案 0 :(得分:1)
打包到L
中通常会给您4个字节,因为这就是L
的含义。使用3个单独的变量(每个1个字节),或者,因为无论如何您要转换为字符串,因此只需舍弃第四个未使用的字节即可:
import struct
hexVars = struct.pack("<L", 10187013)[:3]
print (len(hexVars))
print (ord(hexVars[0]),ord(hexVars[1]),ord(hexVars[2]))
binout = open('binFile', "wb")
binout.write(hexVars)
binFile
的内容符合预期:
(经过测试;此代码可在Python 2.7和3.6上使用。)