Подтвердить что ты не робот

Python 3 Создание массива байтов

Мне нужно создать tcp-фрейм с необработанными двоичными данными, но все примеры и учебные пособия, которые я нашел о байтах, всегда включают преобразование из строки, и это не то, что мне нужно.

Короче, мне нужно построить только массив байтов:

0xA2 0x01 0x02 0x03 0x04

Обратите внимание, что я пришел из мира C/С++.

Я пробовал это:

frame = b""
frame += bytes( int('0xA2',16) )
frame += bytes( int('0x01',16) )
frame += bytes( int('0x02',16) )
frame += bytes( int('0x03',16) )
frame += bytes( int('0x04',16) )

Затем, переместите эту переменную кадра, чтобы отправить метод сокета, но не работает так, как ожидалось, поскольку фрейм не содержит то, что я хочу...

Я знаю, что это очень простой вопрос о Python, поэтому, если вы можете указать мне в правильном направлении...

4b9b3361

Ответ 1

Используйте bytearray:

>>> frame = bytearray()
>>> frame.append(0xA2)
>>> frame.append(0x01)
>>> frame.append(0x02)
>>> frame.append(0x03)
>>> frame.append(0x04)
>>> frame
bytearray(b'\xa2\x01\x02\x03\x04')

или, используя код, но исправляя ошибки:

frame = b""
frame += b'\xA2' 
frame += b'\x01' 
frame += b'\x02' 
frame += b'\x03'
frame += b'\x04'

Ответ 2

как просто создать кадр из стандартного списка?

frame = bytes([0xA2,0x01,0x02,0x03,0x04])

Конструктор bytes() может построить байтовый кадр из итерабельного, содержащего значения int. итерабельным является все, что реализует протокол итератора: список, итератор, итерируемый объект, как то, что возвращается range()...

Ответ 3

frame = b'\xa2\x01\x02\x03\x04'

не упоминалось до сих пор...

Ответ 4

Решение agf bytearray работоспособно, но если вам нужно собрать более сложные пакеты с использованием типов данных, отличных от байтов, вы можете попробовать struct.pack(). http://docs.python.org/release/3.1.3/library/struct.html

Ответ 5

Я думаю, что Scapy - это то, что вы ищете.

http://www.secdev.org/projects/scapy/

вы можете создавать и отправлять кадры (пакеты) с ним