解包需要长度的字符串参数:Windows 问题?

Posted

技术标签:

【中文标题】解包需要长度的字符串参数:Windows 问题?【英文标题】:Unpack Requires A String Argument of Length: Windows Issue? 【发布时间】:2012-10-29 14:52:18 【问题描述】:

我收到上面的错误,当我试图从二进制文件中解压缩浮点数时,它要求我输入长度为 4 的字符串。我的代码在我的 Mac 上运行得非常好,但在 Windows 上却不尽如人意。代码如下:

for i in range (0,elec_array.nb_chan):

    elec_array.chan[i].x = struct.unpack('f',f.read(4))[0]
    elec_array.chan[i].y = struct.unpack('f',f.read(4))[0]

问题出现在elec_array.chan[i].x 行。但是它不会立即发生,它会首先在循环中经过几次迭代,然后最终给出需要长度为 4 的字符串的错误。同样,该代码在 Mac 上运行良好,但由于某种原因在我的 Windows 7 PC 上停止运行。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您可能忘记以二进制模式打开文件。在文本模式下,0x0d0x0a 序列会缩短为0x0a,您的文件大小将错误。

【讨论】:

@user1217248,在 *** 上感谢某人的常用方法是点击答案左侧的向上箭头,然后选择最正确的答案并点击其下方的复选标记。 啊,原谅我还不知道如何使用这个堆栈溢出。我已经勾选提供正确答案,不幸的是我需要更多的代表才能给出代表。 @user1217248,您应该能够对自己问题的答案进行投票。这不适合你吗? 谢谢!我整天都在想办法解决这个问题。 :(【参考方案2】:

好吧,单独做read();它是 I/O,所以正如您刚刚了解到的那样,它可能会失败。

要调试,在读取数据时打印数据和数据长度,这将帮助您了解问题所在。

如果不查看文件和周围的代码,很难更具体。你是用二进制模式打开文件吗?

【讨论】:

正如其他用户所说,我无法以二进制模式打开,这也是您的建议。感谢您的帮助!

以上是关于解包需要长度的字符串参数:Windows 问题?的主要内容,如果未能解决你的问题,请参考以下文章

Perl 打包/解包和二进制字符串的长度

关于 perl 解包

oracle 数据库code 拼接字段如何转换成文字

有效地解包不同长度的数据帧列表

在 Python 中打包/解包复杂数据

pyextend库-unpack列表集合字符串解包函数