问题标签 [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.
python-3.x - Python struct.unpack - 将二进制字符串文字转换为写入文件的 ascii 文本
我们使用 struct.unpack 读取从所有 C 结构字段及其值(整数和字符串)的转储中创建的二进制文件。然后使用解压缩的元组创建字段及其值的中间字典表示,稍后将其写入文本文件输出。
文本文件输出显示字符串如下:
该程序之前是用 python 2.6 编写的,它曾经可以正常工作。我们在写入文本文件时使用了下面的 lambda 表达式来删除不需要的十六进制字符:
移动到 Python 3.5,不再支持 lambda 表达式,因为它现在返回一个不能轻易转换为字符串的过滤器。
将这些二进制字符串文字转换为等效的 ascii 文本(没有尾随 NUL'\x00')的 Pythonic 方法是什么,因此将其写为普通字符串值。
此外,由于每个文件要处理数千个条目(同样有多个文件),因此在当前上下文中寻找一些可能的最佳解决方案。
python - 结构。python 3中的打包错误-struct.error:'s'的参数必须是字节对象
我知道之前有人问过这个问题,其中一些建议似乎是关于需要 ab 使字符串成为字节文字。但是,我将十六进制代码作为 0x414243 传递给函数以将其保存为 ABC。
我不确定要在这里更改什么,我想知道我如何使用格式字符串变量是否有问题。我希望该函数能够从大小中计算出传递的数据中有多少个字符,在本例中为 24 位 = 3 个字节,因此它格式化 3 并传递 0x414243 以转换为 ABC。
任何人都可以建议如何克服错误。
python - Python struct.pack 不一致
我正在使用 struct.pack 向我返回一个字节对象。但是,它是不一致的。
如果我看一下ASCII 字符表,我可以明白为什么它变成了“5”和“!” 在最后两个示例中,但它不应该返回我 b' \0x35 \xfe\x01\x00' 和 b' \0x21 \xfe\x01\x00' 而不是上面的结果吗?我在这里想念什么?
我正在使用 Python 3.7.0。
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)?
python - struct.pack() 返回一个空值
当我尝试执行以下操作时:
32 是一种int
类型。
我期待"\x20"
,但我得到以下(空白):" "
我需要它作为一个字节使用struct()
,因为我想把它放在一个bytearray()
, 中,看起来像这样:
除了“B”之外,我还尝试了其他编码struct.pack()
,但我可能会遗漏一些东西。
python - Python - 在二进制文件中写入特定数量的字节
抱歉,如果这是一个重复的问题,我对 python 还很陌生,并不完全了解命名法,因此很难寻找解决方案。
我正在尝试编写以特定整数格式输出二进制文件的代码,即 8 位的部分,然后是 32 位等。更具体地说,以 STL 格式;可以在此处阅读大纲:维基百科。
我尝试过简单f.write(struct.pack(DATA))
地生成输出文件,但最终结果是文件损坏。STL 确实有 ASCII 版本。我有工作。因此我认为二进制文件生成有问题。我想使用 Binary 来显着减小文件大小。
我假设输出代码看起来像这样*:
有用的链接:
相信可以在上面后面的链接中找到答案,但是我不太明白怎么用。在它之后,我尝试使用struct.pack(I32, DATA)
to 格式化无符号的 32 字节部分,并为其余部分使用类似的代码,但它不起作用。
*我应该注意这不会运行。此处显示格式更改的代码
python - struct.pack 显示移位数据
我正在尝试使用 struct.pack 打包散列摘要,但没有得到预期的结果。
这就是我打包数据的方式:
这是一个示例结果: hash = b5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffeaf
打包 = 1fb5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffe
字节似乎被移动了,并且添加了“1f”。这是格式说明符不正确的结果吗?
编辑:我相信这第一个字节是数据的长度,因为我使用的是“p”。有没有办法避免这种情况?我不想将其包含在我的打包数据中
python - struct.pack 和 struct.unpack 只做字符串的第一个字符
因此,我正在尝试打包数据包标头,并且一切正常,除了我需要打包的标头标志,因为字符串仅解包字符串的第一个字符。
例如,
给我(b'a')
我究竟做错了什么?
python-3.x - 用python编写一个大的短整数列表
我有一个很大的值列表,我想将它们作为短整数写入文件。
我想在 Python3 中有效地做到这一点。
一次一个值,可以使用struct模块:
可以在格式条目前面加上一个计数,如下所示:
但是当我尝试动态构建格式并一次性编写时,我无法输入列表。
例如:
会报错:struct.error: pack expected 100 items for packing (got 1)
如何有效地将大量短整数转储到文件中?
基本上,C 代码的 Python 等价物:
或者如果我使用 Python,我是否被迫一次写一个这些值?