我真的不确定如何在标题中说出这个问题我认为只是显示我的代码会说明一切
import struct
thing1_to_pack = b'Hello World'
thing2_to_pack = 1982
thing3_to_pack = b'weeee123'
packed_thing = struct.pack('12si20s',
thing1_to_pack,
thing2_to_pack,
thing3_to_pack)
print(f'Packed thing is {packed_thing}\n')
unpacked_thing = struct.unpack('12si20s', packed_thing)
print(f'Unpacked thing is {unpacked_thing}\n')
listthing = []
for val in unpacked_thing:
try:
print(f'Adding {val.decode()} to the list\n')
listthing.append(val.decode())
except AttributeError as err:
print(f'Adding {val} to the list\n')
listthing.append(val)
print(f'Our final result is {listthing} !')
我希望最终结果是
['Hello World', 1982, 'weeee123']
然而,我最终得到的是
['Hello World\x00', 1982,
'weeee123\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']
我真的不确定该怎么做,我知道如何通过将12si20s减少到11si8s来摆脱\ x00s,但我使用它的项目将有不同的尺寸,我需要能够将它们剥离出来......
有谁知道这样做的正确方法?
答案 0 :(得分:1)
尝试在最终print
listthing = [var.rstrip('\0')] for var in listthing]
这应该从字符串的末尾删除所有那些讨厌的NULL字节。