web-gelistirme-sc.com

Python: stringi byte dizisine dönüştür

Diyelim ki 4 karakterli bir dizgem var ve bu dizgiyi dizedeki her karakterin hex eşdeğerine çevrildiği bir bayt dizisine dönüştürmek istiyorum. Örneğin.

str = "ABCD"

Çıktımı almaya çalışıyorum 

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

Bunu başarmanın basit bir yolu var mı?

42
Alex

kodlamak işlevi burada size yardımcı olabilir, kodlamak dizenin kodlanmış bir sürümünü döndürür

In [44]: str = "ABCD"

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

veya dizi modülünü kullanabilirsiniz

In [49]: import array

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

Sadece bir bayt listesi olan bytearray() kullanın. 

Python2:

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

Python3:

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

Bu arada, yerleşik değişken olduğundan str değişken adını kullanmayın.

31
Pithikos

Bayt dizisi elde etmenin bir alternatifi dizeyi ascii: b=s.encode('ascii') biçiminde kodlamaktır.

8
Jon Perryman

Bu benim için çalışıyor (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]

Referans: http://www.dotnetperls.com/bytes-python

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

Onaltılık istiyorsanız:

print map(hex, a)
2
HYRY

Bu çalışma hem Python 2 hem de 3’te:

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

Not dizesi b ile başladı.

Tek tek karakterler almak için:

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

Bu yardımcı olur umarım

1
juliocesar

python 3 için @HYRY'nin yayınladığı şey için çalıştı. Bir dbus.array içinde döndürülen bir veri için gerekli. İşe yaramasının tek yolu bu.

s = "ABCD"

dizi alma dizisinden

a = array("B", s)
0
July Marval