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

Python: преобразовать строку в массив байтов

Скажем, что у меня есть строка из 4 символов, и я хочу преобразовать эту строку в массив байтов, где каждый символ в строке преобразуется в ее шестнадцатеричный эквивалент. например.

str = "ABCD"

Я пытаюсь сделать свой вывод

array('B', [41, 42, 43, 44])

Есть ли простой способ сделать это?

4b9b3361

Ответ 1

Функция encode может помочь вам здесь, encode возвращает закодированную версию строки

In [44]: str = "ABCD"

In [45]: [elem.encode("hex") for elem in str]
Out[45]: ['41', '42', '43', '44']

или вы можете использовать модуль массива

In [49]: import array

In [50]: print array.array('B', "ABCD")
array('B', [65, 66, 67, 68])

Ответ 2

Просто используйте bytearray(), который представляет собой список байтов.

python2:

s = "ABCD"
b = bytearray()
b.extend(s)

Python3:

s = "ABCD"
b = bytearray()
b.extend(map(ord, s))

Кстати, не используйте str как имя переменной, так как она встроена.

Ответ 3

Альтернативой для получения байтового массива является кодирование строки в ascii: b=s.encode('ascii').

Ответ 4

Это работает для меня (Python 2)

s = "ABCD"
b = bytearray(s)

# if your print whole b, it still displays it as if its original string
print b

# but print first item from the array to see byte value
print b[0]

Ссылка: http://www.dotnetperls.com/bytes-python

Ответ 5

s = "ABCD"
from array import array
a = array("B", s)

Если вы хотите hex:

print map(hex, a)

Ответ 6

для python 3 это сработало для того, что выложил @HYRY. Мне это нужно для возвращаемых данных в dbus.array. Это единственный способ, которым это сработало

s = "ABCD"

из массива импорта массива

a = array("B", s)

Ответ 7

Эта работа в Python 2 и 3:

>>> bytearray(b'ABCD')
bytearray(b'ABCD')

Примечание строка начинается с b.

Чтобы получить отдельные символы:

>>> print("DEC HEX ASC")
... for b in bytearray(b'ABCD'):
... print(b, hex(b), chr(b))
DEC HEX ASC
65 0x41 A
66 0x42 B
67 0x43 C
68 0x44 D

Надеюсь это поможет