78

4文字の文字列があり、この文字列をバイト配列に変換して、文字列内の各文字を16進数に変換するとします。例えば

str = "ABCD"

私は自分の出力を次のようにしようとしています

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

これを達成する簡単な方法はありますか?

4

9 に答える 9

64

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])
于 2012-07-24T04:39:51.113 に答える
58

bytearray()バイトのリストであるaを使用するだけです。

Python2:

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

Python3:

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

ちなみに、str変数名は組み込みなので使用しないでください。

于 2015-03-20T14:32:55.190 に答える
22

バイト配列を取得する別の方法は、文字列をASCIIでエンコードすることです b=s.encode('ascii')

于 2015-07-19T06:42:40.563 に答える
10

これは私のために働きます(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

于 2016-05-27T03:13:24.920 に答える
6

これは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

お役に立てれば

于 2019-04-22T17:17:51.543 に答える
5

ニーズに応じて、これは1ステップまたは2ステップになります

  1. 文字列をバイトに変換するために使用encode()します、不変
  2. 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')
于 2020-08-01T23:45:00.217 に答える
1
s = "ABCD"
from array import array
a = array("B", s)

16進数が必要な場合:

print map(hex, a)
于 2012-07-24T04:51:48.360 に答える
0

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であることに注意してください。

于 2021-12-15T14:04:59.953 に答える
-1

Python 3の場合、@HYRYが投稿したものに対して機能しました。dbus.arrayで返されるデータに必要でした。これが機能した唯一の方法です

s = "ABCD"

配列からインポート配列

a = array("B", s)
于 2018-12-19T15:08:09.050 に答える