Python 打包未对齐的字节

Python 打包未对齐的字节,python,python-2.7,pack,Python,Python 2.7,Pack,我有一个Perl脚本,它创建了一个二进制输入文件,我们将其传递给另一组代码。二进制输入文件由数百个不同长度的参数组成。大多数是8、16或32位。我正在尝试将Perl脚本转换为Python,让我感到困惑的是,只有几个24位长的参数 我看了看,它离我很近,但不是我所需要的 比如说。假设输入值是一个整数10187013。如何将其压缩到3个字节?如果我这样做: hexVars = struct.pack("<L", 10187013) 正如预期的那样,它打印出四个字节05719B00,

我有一个Perl脚本,它创建了一个二进制输入文件,我们将其传递给另一组代码。二进制输入文件由数百个不同长度的参数组成。大多数是8、16或32位。我正在尝试将Perl脚本转换为Python,让我感到困惑的是,只有几个24位长的参数

我看了看,它离我很近,但不是我所需要的

比如说。假设输入值是一个整数10187013。如何将其压缩到3个字节?如果我这样做:

    hexVars  = struct.pack("<L", 10187013)
正如预期的那样,它打印出四个字节05719B00,我想要的是05719B。我可以强制它只打包3个字节吗?或者在写入前以某种方式删除最后一个字节?

打包到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。

谢谢。我知道答案
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)