打包未对齐的字节

2024-10-04 01:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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个字节吗?或者在写出来之前去掉最后一个字节


Tags: 文件代码脚本参数字节二进制forum整数
1条回答
网友
1楼 · 发布于 2024-10-04 01:28:29

打包成一个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的内容如预期:

enter image description here

(a)测试;这段代码适用于python2.7和python3.6。)

相关问题 更多 >