2016-12-20 7 views
0

私はx86、リトルエンディアンです。 私はこのデータをudpパケットから取得しました。Pythonで16進文字列を表示する

data, addr = sock.recvfrom(1024) 

print(data) 

は、私は、メモリ内のリトルエンディアンのレイアウトであることを理解し'\xfe\x15'

のようなものを提供します。

値はCで 0x15fe

として表現されなければならない私は、やる

printf("%x", hexvalue); 

、それは私に0x15fe straightawayを与えます。

16進数値を正しく出力するためにPythonを取得する方法を教えてください。

多くのありがとうございます。あなたはこのように、structを使ってint型にバイト文字列に変換することができます

+0

あなたはrepr(データ)を試しましたか? –

答えて

2

:ここ

>>> data = b'\xfe\x15' 
>>> num, = struct.unpack('<h', data) 

<hは、リトルエンディアンの2バイトの符号付き整数を表します。データが署名されていない場合は、<Hを使用してください。詳しくはdocumentationをご覧ください。

次に、あなたはprint(hex(num))または類似を使用して印刷することができます。

>>> print(hex(num)) 
0x15fe 

を注意点として、sock.recvfrom(1024)は2つのバイトよりも、多かれ少なかれ戻してもよいことに注意してください。解析時にそのことを考慮してください。

関連する問題