Невозможно добавить декодированную строку в список без перекодирования строки - PullRequest
0 голосов
/ 26 мая 2018

Я действительно не уверен, как сформулировать этот вопрос в заголовке. Я думаю, просто показ моего кода говорит сам за себя

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']

Я действительно не уверен, что делать, я знаю, как я могу избавиться от \ x00s, уменьшив 12si20s до чего-то вроде 11si8s, но проектЯ использую это для, будет иметь различные размеры, и мне нужно иметь возможность просто раздеть их ...

Кто-нибудь знает правильный способ сделать это?

1 Ответ

0 голосов
/ 26 мая 2018

Попробуйте поставить следующее перед вашим последним print

listthing = [var.rstrip('\0')] for var in listthing]

Это должно удалить все эти надоедливые NULL-байты с концов ваших строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...