Как создать «поток байтов» из другого типа данных в Python - PullRequest
2 голосов
/ 30 августа 2011

Вот небольшая проблема: я хочу создать поток байтов (таблица целых байтов) из другого типа данных, целого числа переменной длины, строки.

val1 = 0x2
val2 = 0x0001020304050607
val3 = "blablabla"

И я хочу получитьпоток вроде:

byteStream = val1 + val2 + val3
byteStream = [0x02, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x62, 0x6c, 0x61, 0x62, 0x6c, 0x61, 0x62, 0x6c, 0x61]

Я пробовал несколько вещей, например, используя промежуточную строку, а затем преобразовал это в байт.Но это решение безобразно и не работает должным образом.

Любая помощь приветствуется.Спасибо.

1 Ответ

3 голосов
/ 30 августа 2011
import struct

val1 = 0x2
val2 = 0x0001020304050607
val3 = "blablabla"

data=struct.pack('>BQ9s',val1,val2,val3)
print repr(data)

возвращает

'\x02\x00\x01\x02\x03\x04\x05\x06\x07blablabla'

BQ9s указывает struct.pack упаковывать один беззнаковый int (1 байт), за которым следует один длинный без знака (8 байт), за которым следуют 9 символов (1 байт)каждый).Список возможных символов формата можно найти здесь .

data - это строка (то есть последовательность байтов).Если вы хотите в конечном итоге иметь список, вы можете использовать list(data).

...