Python, используя реальные байтовые значения в Bytearray

Я использую Socket-Communication между моим ПК и модулем SPS. Они передают байты для связи, используя python bytestring(). На стороне ПК я должен переключать числовые команды (целые числа), но их в строку байтов и отправлять через сокет. Значения от 8, 9, 12 и многое другое выдают ошибку на стороне SPS, так как они изменяются UTF-8: 8 -> \t, 9 -> \n. Как я могу сохранить эти данные в реальном гексе и без кодирования UTF?

my_b = bytearray()
my_b.append(8) #fill with Bytevalues
my_b.append(9)
my_b.append(10)
my_b.append(11)
my_b.append(12)
my_b.append(13)
print (my_b)
>> bytearray(b'\x08\t\n\x0b\x0c\r')

1 ответ

Они не меняются. \t, \n а также \r являются просто встроенными сокращениями для выражения значений байтов 9, 10 и 13. Эти значения являются управляющими символами ASCII (в частности, табуляция, перевод строки и возврат каретки).

Чтобы доказать это, добавьте эти строки в конец своего фрагмента кода:

with open("/tmp/foo", "wb") as f:
    f.write(my_b)

Затем свалить /tmp/foo как шестнадцатеричные байты:

od -tx1 /tmp/foo
0000000 08 09 0a 0b 0c 0d
0000006
Другие вопросы по тегам