在尝试保存endianess时,Python struct.pack()'struct.error:struct format中的错误char'

时间:2015-10-06 02:41:11

标签: python struct

我正在尝试打包字符串和字符串的长度。

fmt = '<P' + str(len(string)) + 'p'

这导致我出错:struct.error:struct format中的错误char 然而,做

fmt = 'P' + str(len(string))+'p'

不会给我一个错误。我无法理解为什么会发生这种情况,我的理解是指定'&lt;'无论本机如何,一开始都会使它成为小端。

2 个答案:

答案 0 :(得分:1)

来自struct模块docstring:

The remaining chars indicate types of args and must match exactly;
...
Special case (only available in native format):
  P:an integer type that is wide enough to hold a pointer.

因此,当您使用P格式时,无法修改字节顺序;它仅以原生格式提供。

另见备注5:https://docs.python.org/2/library/struct.html#format-characters

答案 1 :(得分:1)

“&LT;”将数据打包为小端,但它是通过使用“标准”对齐而不是计算机的本机规则来实现的。您可以在the struct module documentation找到该表。

正如Warren Weckesser所指出的那样,P格式不能修改其结尾,但如果你使用“&lt; i”代替,那将完全起作用。