【问题标题】:how to remove padding in struct python during unpacking如何在解包过程中删除 struct python 中的填充
【发布时间】:2018-04-20 15:18:18
【问题描述】:

当我在struct中使用打包时,我发现在解包过程中我解包字节对象后有多余的字符。

例如打包前: c = b'CONNECT' 使用struct解包后得到的值为b'CONNECT\x00\x00\x00\x00\x00'

这是我的代码:

import struct
import datetime
import binascii

string_format = '12s'
s = struct.Struct(string_format)
str = 'CONNECT'
byte = str.encode()
print(byte)

packed_data = s.pack(byte)
print(packed_data)
unpacked_data = s.unpack(packed_data)
unpacked_data = unpacked_data[0]
arr = []

for item in unpacked_data.decode():
    print(item)
    arr.append(item)

print(arr)

解压后如何获取b'CONNECT'

【问题讨论】:

  • 你能告诉我们你的代码吗?
  • import struct import datetime import binascii string_format = '12s' s = struct.Struct(string_format) str = 'CONNECT' byte = str.encode() print(byte) packed_data = s.pack(byte ) print(packed_data) unpacked_data = s.unpack(packed_data) unpacked_data = unpacked_data[0] arr = [] for item in unpacked_data.decode(): print(item) arr.append(item) print(arr)

标签: python-3.x struct byte argument-unpacking


【解决方案1】:

添加了额外的NUL 字节,因为您使用'12s' 将结构格式更新为具有12 个字符。如果您在所有语句之前添加print('CONNECT'.encode()),您会发现它是正确的。

由于您可能希望 strip 关闭其他字符,因此只需使用该功能:

print(repr(unpacked_data.decode().strip()))          #Prints 'CONNECT'

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2013-05-18
    • 2021-07-30
    • 1970-01-01
    • 2021-03-25
    • 2015-12-03
    • 1970-01-01
    • 2023-04-04
    • 2019-01-20
    相关资源
    最近更新 更多