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