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

Rayven Esplanada 2023年1月30日
  1. Python でバイトリテラルを初期化する
  2. Python でバイトを 16 進数に変換するには hex() メソッドを使用する
  3. Python でバイトを 16 進数に変換するには binascii モジュールを使用する
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() 関数を使って同じ出力を生成することもできます。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

関連記事 - Python Bytes

関連記事 - Python Hex