2016-10-21 9 views
0

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

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

ответ

0

Они не изменяются. \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 

 Смежные вопросы

  • Нет связанных вопросов^_^