【问题标题】:Error Packing and Unpacking bytes in PythonPython中的错误打包和解包字节
【发布时间】:2017-07-28 05:38:44
【问题描述】:

输入值后,我的代码有错误(见下面的代码)。我可以打包这些位,但拆包不起作用。有什么建议么?我不完全了解打包和拆包,文档有点混乱。

import struct


#binaryadder - 
def binaryadder(input):
    input = int(input)
    d = struct.pack("<I", input)
    print d
    print type(d)
    d = struct.unpack("<I",input)
    print d 
#Test Pack 

count = 0
while True:
    print "Enter input"
    a = raw_input()
    binaryadder(a)
    count = count + 1
    print "While Loop #%s finished\n" % count 

在我输入字符串后,此代码会抛出以下错误:

Enter input
900
ä
<type 'str'>
Traceback (most recent call last):
  File "C:\PythonPractice\Binarygenerator.py", line 25, in <module>
    binaryadder(a)
  File "C:\PythonPractice\Binarygenerator.py", line 17, in binaryadder
    d = struct.unpack("<I",input)
struct.error: unpack requires a string argument of length 4

【问题讨论】:

    标签: python struct python-2.x


    【解决方案1】:
    d = struct.pack("<I", input)
    

    这会将输入打包成一个字符串;所以输入的数字900被打包到字符串'\x84\x03\x00\x00'中。

    然后,稍后,您可以这样做:

    d = struct.unpack("<I",input)
    

    现在您尝试解包 相同输入,它仍然是900。显然,这不起作用,因为您需要解压缩字符串。在您的情况下,您可能想要解压缩之前打包的 d。所以试试这个:

    unpacked_d = struct.unpack("<I", d)
    

    unpacked_d 应包含 input 的号码。

    【讨论】:

    • 我看到输入错误,但这不应该将输入打包为整数吗?当我在 shell 中键入 struct.unpack(",d) 时,我得到 '\x84\x03\x00\x00' 而不是 'ä'
    • 好的,是的,我不知道你的ä 是从哪里来的。如果你执行 struct.pack("input 的值),你会得到 '\x84\x03\x00\x00'。如果您现在解压缩该字符串:struct.unpack("&lt;I", '\x84\x03\x00\x00'),您将取回您的 900
    • print repr(d) 将显示'\x84\x03\x00\x00'。打印d 直接解释终端编码中的字节。 \x84 是 OP 终端中的 ä
    猜你喜欢
    • 2020-07-17
    • 2017-12-26
    • 2019-12-22
    • 1970-01-01
    • 2020-01-28
    • 2020-09-18
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多