问题标签 [struct.pack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1493 浏览

python-3.x - Python struct.unpack - 将二进制字符串文字转换为写入文件的 ascii 文本

我们使用 struct.unpack 读取从所有 C 结构字段及其值(整数和字符串)的转储中创建的二进制文件。然后使用解压缩的元组创建字段及其值的中间字典表示,稍后将其写入文本文件输出。

文本文件输出显示字符串如下:

该程序之前是用 python 2.6 编写的,它曾经可以正常工作。我们在写入文本文件时使用了下面的 lambda 表达式来删除不需要的十六进制字符:

移动到 Python 3.5,不再支持 lambda 表达式,因为它现在返回一个不能轻易转换为字符串的过滤器。

将这些二进制字符串文字转换为等效的 ascii 文本(没有尾随 NUL'\x00')的 Pythonic 方法是什么,因此将其写为普通字符串值。

此外,由于每个文件要处理数千个条目(同样有多个文件),因此在当前上下文中寻找一些可能的最佳解决方案。

0 投票
1 回答
1388 浏览

python - 结构。python 3中的打包错误-struct.error:'s'的参数必须是字节对象

我知道之前有人问过这个问题,其中一些建议似乎是关于需要 ab 使字符串成为字节文字。但是,我将十六进制代码作为 0x414243 传递给函数以将其保存为 ABC。

我不确定要在这里更改什么,我想知道我如何使用格式字符串变量是否有问题。我希望该函数能够从大小中计算出传递的数据中有多少个字符,在本例中为 24 位 = 3 个字节,因此它格式化 3 并传递 0x414243 以转换为 ABC。

任何人都可以建议如何克服错误。

0 投票
0 回答
12 浏览

python-2.7 - struct.pack 行中 * 字符的含义?

谁能告诉我这行 python 代码中 * 字符在做什么?

我浏览了文档,但我自己找不到那个角色。

谢谢!

0 投票
2 回答
554 浏览

python - Python struct.pack 不一致

我正在使用 struct.pack 向我返回一个字节对象。但是,它是不一致的。

如果我看一下ASCII 字符表,我可以明白为什么它变成了“5”和“!” 在最后两个示例中,但它不应该返回我 b' \0x35 \xfe\x01\x00' 和 b' \0x21 \xfe\x01\x00' 而不是上面的结果吗?我在这里想念什么?

我正在使用 Python 3.7.0。

0 投票
1 回答
73 浏览

python - 用另一种语言解压pythons struct.pack

我想“解包”或反序列化从 python 的 struct.pack() 函数输出的格式化数据。数据通过网络发送到另一个仅使用 Java 的平台。

通过网络发送数据的 Python 函数使用这个格式化程序:

以下是 python 结构的文档(请参阅第 7.3.2.2 节。格式化字符): https ://docs.python.org/2/library/struct.html

1) 问题是 'qqd%ss%ss' 是什么意思???

是否意味着 -> long,long,double,char,char,[],char[],char,char[],char[]

2)为什么这里使用模数 "%"和元组 'qqd%ss%ss' % (mac_len, arr_len)

0 投票
2 回答
139 浏览

python - struct.pack() 返回一个空值

当我尝试执行以下操作时:

32 是一种int类型。

我期待"\x20",但我得到以下(空白):" "

我需要它作为一个字节使用struct(),因为我想把它放在一个bytearray(), 中,看起来像这样:

除了“B”之外,我还尝试了其他编码struct.pack(),但我可能会遗漏一些东西。

0 投票
1 回答
771 浏览

python - Python - 在二进制文件中写入特定数量的字节

抱歉,如果这是一个重复的问题,我对 python 还很陌生,并不完全了解命名法,因此很难寻找解决方案。

我正在尝试编写以特定整数格式输出二进制文件的代码,即 8 位的部分,然后是 32 位等。更具体地说,以 STL 格式;可以在此处阅读大纲:维基百科

我尝试过简单f.write(struct.pack(DATA))地生成输出文件,但最终结果是文件损坏。STL 确实有 ASCII 版本。我有工作。因此我认为二进制文件生成有问题。我想使用 Binary 来显着减小文件大小。

我假设输出代码看起来像这样*:

有用的链接:

struct.pack 文档

格式规范

相信可以在上面后面的链接中找到答案,但是我不太明白怎么用。在它之后,我尝试使用struct.pack(I32, DATA)to 格式化无符号的 32 字节部分,并为其余部分使用类似的代码,但它不起作用。

*我应该注意这不会运行。此处显示格式更改的代码

0 投票
1 回答
49 浏览

python - struct.pack 显示移位数据

我正在尝试使用 struct.pack 打包散列摘要,但没有得到预期的结果。

这就是我打包数据的方式:

这是一个示例结果: hash = b5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffeaf

打包 = 1fb5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffe

字节似乎被移动了,并且添加了“1f”。这是格式说明符不正确的结果吗?

编辑:我相信这第一个字节是数据的长度,因为我使用的是“p”。有没有办法避免这种情况?我不想将其包含在我的打包数据中

0 投票
1 回答
106 浏览

python - struct.pack 和 struct.unpack 只做字符串的第一个字符

因此,我正在尝试打包数据包标头,并且一切正常,除了我需要打包的标头标志,因为字符串仅解包字符串的第一个字符。

例如,

给我(b'a')

我究竟做错了什么?

0 投票
1 回答
36 浏览

python-3.x - 用python编写一个大的短整数列表

我有一个很大的值列表,我想将它们作为短整数写入文件。

我想在 Python3 中有效地做到这一点。

一次一个值,可以使用struct模块:

可以在格式条目前面加上一个计数,如下所示:

但是当我尝试动态构建格式并一次性编写时,我无法输入列表。

例如:

会报错:struct.error: pack expected 100 items for packing (got 1)

如何有效地将大量短整数转储到文件中?

基本上,C 代码的 Python 等价物:

或者如果我使用 Python,我是否被迫一次写一个这些值?