Pythonの16進数文字をINTに変換します
解決
Python文字列から直接numpy配列を取得するには、使用できます
s = "\xff\x03"
a = numpy.frombuffer(s, numpy.uint8)
リストを取得するには、使用できます
a = map(ord, s)
Python 2.6以上のリストに代わるものは、使用することです bytesarray(s)
.
他のヒント
このようなことを試してみてください:
a = '\xff'
print int(a.encode('hex'), 16)
255
編集:申し訳ありませんが、以前のバージョンには間違いがありました - エンコードの代わりにデコード。これは機能します。
編集2:コメンターが指摘したように、私は実際に質問を誤解しました。これはすでに明らかなかもしれませんが、誰かが通常のPythonリストソリューションが役立つと判断した場合には次のものがあります。
>>> a = '\xff\xfe'
>>> [str(ord(char)) for char in a]
['255', '254']
>>> ' '.join([str(ord(char)) for char in a])
'255 254'
これは、可変長さのサブストリングを備えた16進ストリングを処理する一般化されたアプローチです。
s = '5b1\n5\n3ad44'
次のコードは、300万の可変長ヘックスサブストリングを持つ文字列を、ベクトル化により2秒で(MacBookで)numpy整数アレイに変換します。
import numpy as np, pandas as pd, cStringIO
s = ('5b1\n5\n3ad44\n' * 1000000)[:-1] # 3m item hex string (variable element length)
# change hex to 2 digit decimal
for i in range(0,9): s = s.replace(str(i),'0' + str(i))
for i in [['a','10'],['b','11'],['c','12'],['d','13'],['e','14'],['f','15']]:
s = s.replace(i[0],i[1])
# read string into numpy
n = np.array(pd.read_csv(cStringIO.StringIO(s), header=None)[[0]]).astype('int64')
# fix base
n = (n % 100) + 16 * ((n % 10000)/100) + 256 * ((n % 1000000)/10000) + 4096 * ((n % 100000000)/1000000) + 65536 * ((n % 10000000000)/100000000)
n[0:3] # confirm correct transformation to [1457, 5, 240964]
はい、 \xff
バイト内のヘックス値の印刷表現です。しかし int()
バイトのヘックス表現ではなく、数字の文字列表現では機能します。 Base-16の世界の数字は「13」または「AB」または「FF」です。その結果(しかし、それでも面白い)、 int('ff',16)
正常に動作します。そのルートに行きたい場合は、 ' x' :-)を取り除く必要があります。
所属していません StackOverflow