2016-06-09 48 views
1

所以我正在看我写的代码可能多达4年前,我知道它在当时正确运行。但是现在我正在试图在不同的计算机上运行它,而不是在几年前我写它的时候,而现在我得到了一个错误。 (今天在Windows 10和Ubuntu上试用过)Python结构格式错误

我正在使用Python 2.7,因为我也是。我正在使用Struct库从文件中解压C类型,特别是我试图解压4个字节长的值。 这里是2.7结构库的文档。 https://docs.python.org/2/library/struct.html

如果向下滚动到“格式字符”部分,您可以看到一个C类型的表格。

这里是我的代码:

bps = int(unpack('L', fmap[o+10:o+14])[0]) 

这里是我的错误。

error: unpack requires a string argument of length 8 

令我迷惑的部分是“长度8”部分。如果我将C类型更改为“I”,则代码执行正常。但是文档似乎很清楚,“L”也是4字节,并且它在过去有效。我想我可以使用“我”类型用于我的目的,但我很好奇,如果有人看到这一点。

回答

3

标准大小的L为4个字节,但如果你是明文规定只用于有关的字节顺序由开始的格式字符串><!,或=使用。否则,将使用机器的平台相关本机大小。 (在这种情况下,8字节)。

+0

啊,非常有趣。我只是在'L'前添加'<'来测试它,它非常有用,所以非常感谢。当我在几年前编写和测试时,它会在Windows XP系统上运行,所以这很有意义。 – reallcoder