4文字の文字列があり、この文字列をバイト配列に変換して、文字列内の各文字を16進数に変換するとします。例えば
str = "ABCD"
私は自分の出力を次のようにしようとしています
array('B', [41, 42, 43, 44])
これを達成する簡単な方法はありますか?
4文字の文字列があり、この文字列をバイト配列に変換して、文字列内の各文字を16進数に変換するとします。例えば
str = "ABCD"
私は自分の出力を次のようにしようとしています
array('B', [41, 42, 43, 44])
これを達成する簡単な方法はありますか?
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])
bytearray()
バイトのリストであるaを使用するだけです。
Python2:
s = "ABCD"
b = bytearray()
b.extend(s)
Python3:
s = "ABCD"
b = bytearray()
b.extend(map(ord, s))
ちなみに、str
変数名は組み込みなので使用しないでください。
バイト配列を取得する別の方法は、文字列をASCIIでエンコードすることです b=s.encode('ascii')
。
これは私のために働きます(Python 2)
s = "ABCD"
b = bytearray(s)
# if you 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
これはPython2と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
お役に立てれば
ニーズに応じて、これは1ステップまたは2ステップになります
encode()
します、不変bytearray()
バイトをbytearrayに変換するために使用します。s="ABCD"
encoded=s.encode('utf-8')
array=bytearray(encoded)
次の検証はPython3.7で行われます
>>> s="ABCD"
>>> encoded=s.encode('utf-8')
>>> encoded
b'ABCD'
>>> array=bytearray(encoded)
>>> array
bytearray(b'ABCD')
s = "ABCD"
from array import array
a = array("B", s)
16進数が必要な場合:
print map(hex, a)
Python 3では、どの答えも正確に生成array('B', [41, 42, 43, 44])
されておらず、 avasalによる答えは失敗するため、ここに代替案を投稿します。
import array
s = 'ABCD'
a = array.array('B', [ord(c) for c in s])
print(a)
印刷する
array('B', [65, 66, 67, 68])
65-68が「ABCD」の正しいASCIIであることに注意してください。
Python 3の場合、@HYRYが投稿したものに対して機能しました。dbus.arrayで返されるデータに必要でした。これが機能した唯一の方法です
s = "ABCD"
配列からインポート配列
a = array("B", s)