Python:如何使用 struct.pack_into 将不同类型的数据打包到字符串缓冲区中

标签 python c struct

我正在尝试将一些无符号整数数据打包到使用 ctypes.create_string_buffer 创建的字符串缓冲区中。

这是以下代码段,以及显示错误 on codepad 的运行示例:

import struct
import ctypes
import binascii

buf = ctypes.create_string_buffer(16)
struct.pack_into("=I=I=I", buf, 0, 1, 2, 3)
print binascii.hexlify(buf)

这会产生以下错误:

...
struct.error: bad char in struct format

如果底层缓冲区是特定的 C 类型,文档没有提到您是否可以打包不同类型的数据。在这种情况下,尝试将 unsigned int 数据打包到具有底层 c_char 类型的字符串缓冲区中。任何人都知道执行此操作的解决方案,或者是否有特定的方法来创建可以打包任何类型数据的缓冲区?

最佳答案

您不应该在每个输出说明符前加上“=”代码。只说一遍:

struct.pack_into("=III", buf, 0, 1, 2, 3)

这会产生:

01000000020000000300000000000000

关于Python:如何使用 struct.pack_into 将不同类型的数据打包到字符串缓冲区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961407/

相关文章:

c - 读取文件时出现奇怪的结果

在 UNIX 中创建 FIFO

c - 唯一元素 - 结构数组

c - 奇怪的结构声明

python - 类型错误 : 'function' object has no attribute '__getitem__' ; MEDIA_URL

python - pytorch 数据集中每个类的实例数

python - 使用 isin/transform/merge/groupby/map 的组合来有条件地填充数据帧列

c - 使用 scanf() 得到一个 int 和一些字符串?

c++ - 为什么复制对比复制结构慢?

python - 给定 2 个整数列表如何找到不重叠的范围?