无法在不重新编码字符串的情况下将已解码的字符串附加到列表中

时间:2018-05-25 21:41:29

标签: python python-3.x struct append

我真的不确定如何在标题中说出这个问题我认为只是显示我的代码会说明一切

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,但我使用它的项目将有不同的尺寸,我需要能够将它们剥离出来......

有谁知道这样做的正确方法?

1 个答案:

答案 0 :(得分:1)

尝试在最终print

之前添加以下内容
listthing = [var.rstrip('\0')] for var in listthing]

这应该从字符串的末尾删除所有那些讨厌的NULL字节。