HOWTO · Python

Python でバイトを 16 進数に変換する

python でバイトを 16 進数に変換する方法を紹介しています。

このページの内容

このチュートリアルでは、Python でバイトを 16 進数に変換する方法を紹介します。

Python におけるバイトデータ型とは、ディスク上に変数として格納しておき、それをエンコードしたりデコードしたりすることができるバイト列のことです。バイトデータ型は文字列のように宣言されますが、プレフィックスは文字 b です。バイトは、\x で始まる特殊な Unicode 文字を受け付けます。

Python でバイトリテラルを初期化する

バイトリテラルの例を示し、特殊文字を含む文字列を宣言し、関数 encode('utf-8') を用いてバイトリテラルに変換します。

byte_var = "γιαούρτι - yogurt".encode("utf-8")

print(byte_var)

出力:

b'\xce\xb3\xce\xb9\xce\xb1\xce\xbf\xcf\x8d\xcf\x81\xcf\x84\xce\xb9 - yogurt'

encode() の出力は、バイトリテラルの前に文字 b を付加し、特殊文字を Unicode シンボルに変換したものです。

ここまででバイトの宣言を説明したので、バイトを 16 進数に変換してみよう。

Python でバイトを 16 進数に変換するには hex() メソッドを使用する

Python 3.5 から導入された hex() メソッドは 16 進数の文字列に変換します。

この場合、引数は 16 進数に変換するバイトデータ型になります。

byte_var = "γιαούρτι - yogurt".encode("utf-8")

print("Byte variable: ", byte_var)
print("Hexadecimal: ", byte_var.hex())

出力:

Byte variable:  b'\xce\xb3\xce\xb9\xce\xb1\xce\xbf\xcf\x8d\xcf\x81\xcf\x84\xce\xb9 - yogurt'
Hexadecimal:  ceb3ceb9ceb1cebfcf8dcf81cf84ceb9202d20796f67757274

Python でバイトを 16 進数に変換するには binascii モジュールを使用する

Python モジュール binascii には、バイナリや ASCII 操作のための効率的なユーティリティ関数が含まれています。

このモジュール内には、与えられた引数の 16 進数の値(バイナリ値)を返す関数 hexlify() があります。

この例では、引数は 16 進数に変換されるバイト変数になります。

import binascii

byte_var = "γιαούρτι - yogurt".encode("utf-8")

print("Byte variable: ", byte_var)
print("Hexadecimal: ", binascii.hexlify(byte_var))

出力:

Byte variable:  b'\xce\xb3\xce\xb9\xce\xb1\xce\xbf\xcf\x8d\xcf\x81\xcf\x84\xce\xb9 - yogurt'
Hexadecimal:  b'ceb3ceb9ceb1cebfcf8dcf81cf84ceb9202d20796f67757274'

変換された文字列を返す hex() とは異なり、hexlify() の戻り値はバイトリテラルを返すことに注意してください。

結果を文字列に変換したい場合は、関数 decode('utf-8') を用います。

import binascii

byte_var = "γιαούρτι - yogurt".encode("utf-8")

print("Byte variable: ", byte_var)
print("Hexadecimal: ", "" + binascii.hexlify(byte_var).decode("utf-8"))

出力:

Byte variable:  b'\xce\xb3\xce\xb9\xce\xb1\xce\xbf\xcf\x8d\xcf\x81\xcf\x84\xce\xb9 - yogurt'
Hexadecimal:  ceb3ceb9ceb1cebfcf8dcf81cf84ceb9202d20796f67757274

これで 16 進数の結果がバイトリテラルから文字列に変換された。

まとめると、Python でバイトを 16 進数に変換する方法を 2つ取り上げました。最も簡単な方法は、組み込みの関数 hex() をバイトリテラルに利用する方法です。あるいは、binascii モジュールの hexlify() 関数を使って同じ出力を生成することもできます。