Форум сайта python.su
0
Для просто списка делаю вот так a = array= bytearray(a)
Как получить массив байт со списка вот такого типа [0x0A, 0x0B, 0x0C, , “string”] ?
Офлайн
857
>>> lst = [0x0A, 0x0B, 0x0C, 'string'] >>> >>> bt = bytearray() >>> for i in lst: ... if type(i) is int: ... bt.append(i) ... else: ... bt.extend(i.encode('latin1')) ... >>> bt bytearray(b'\n\x0b\x0cstring') >>>
Офлайн
36
py.user.next
C целыми скорее так:
# python 2.x for i in lst: if isinstance(i, (int, long)): bt.append(chr(i)) ... # python 3.x for i in lst: if isinstance(i, int): bt.append(i.to_bytes(1, byteorder='big')) ...
Офлайн
0
Большое спасибо. Думал есть какое то универсальное решение.
До этого писал на СИ на ARM, AVR. так там все просто есть структура данных привожу к указателю и делаю инкремент …
А если например такого типа, lst = [0x31, 0x32, 0x33, [0x34, 0x35, ]] или я вообще не знаю сколько вложенных типов, есть строки или нет …
?
Офлайн
253
vic_gorНе очень понятно что вы имеете ввиду.
До этого писал на СИ на ARM, AVR
Офлайн
857
pyuser
C целыми скорее так:bt.append(i.to_bytes(1, byteorder='big'))
>>> (256).to_bytes(1, 'big') Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: int too big to convert >>>
>>> (256).to_bytes(4, 'big') b'\x00\x00\x01\x00' >>>
>>> (256).to_bytes(2, 'big') b'\x01\x00' >>> '\x01\x00'.encode('latin1') b'\x01\x00' >>>
Отредактировано py.user.next (Апрель 1, 2014 23:08:35)
Офлайн