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

Rayven Esplanada 2023年1月30日
  1. 16 進値を初期化する
  2. Python で bytes.fromhex() を使用して 16 進数をバイトに変換する
  3. Python で 16 進数をバイトに変換するには unhexlify モジュールを使用する
Python で 16 進数をバイトに変換する

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

16 進数または 16 進値とは、10 進値の通常の 10 個の記号の代わりに 16 個の記号で構成された数値を表現したものです。0 から 9 までの数字と a から e までの文字が 16 の 16 進数記号を構成しています。

例えば、1000 の 16 進変換は 3E8 です。

16 進値を初期化する

文字列を使って 16 進値を作成し、binascii モジュールの関数 hexlify() を使って A quick brown fox というフレーズを 16 進値に変換してみましょう。

また、文字列を 16 進数に変換するには、文字列をバイトに変換して 16 進数に変換できるようにする必要があります。

import binascii

str_val = "A quick brown fox".encode("utf-8")
hex_val = binascii.hexlify(str_val).decode("utf-8")

print(hex_val)

出力:

4120717569636b2062726f776e20666f78

文字列を 16 進数に変換できたので、次に 16 進数をバイトに変換する方法を説明します。

Python で bytes.fromhex() を使用して 16 進数をバイトに変換する

関数 bytes.fromhex() は 16 進値を 1つ受け取り、それをバイトリテラルに変換します。

前の結果から 16 進値を取り出し、fromhex() を用いてバイトリテラルに変換します。

hex_val = "4120717569636b2062726f776e20666f78"

print(bytes.fromhex(hex_val))

出力:

Byte value:  b'A quick brown fox'

これは、値が bytes リテラルであることを指定するために文字 b を先頭にして 16 進数に変換したものです。

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

Python モジュールの binascii には、バイナリと ASCII 演算のための効率的なユーティリティ関数が含まれています。unhexlify()binascii モジュール内の関数で、16 進値をバイトリテラルに変換します。

新しい例を非 ASCII 文字で初期化して、16 進値に変換してみましょう。この例では、a quick brown fox というフレーズのギリシャ語翻訳を行います。

import binascii
from binascii import unhexlify

str_val = "Μια γρήγορη καφέ αλεπού".encode(
    "utf-8"
)  # A quick brown fox in Greek translation
hex_val = binascii.hexlify(str_val).decode("utf-8")

print("String value: ", str_val.decode("utf-8"))
print("Hexadecimal: ", hex_val)
print("Byte value: ", unhexlify(hex_val))

出力:

String value:  Μια γρήγορη καφέ αλεπού
Hexadecimal:  ce9cceb9ceb120ceb3cf81ceaeceb3cebfcf81ceb720cebaceb1cf86cead20ceb1cebbceb5cf80cebfcf8d
Byte value:  b'\xce\x9c\xce\xb9\xce\xb1 \xce\xb3\xcf\x81\xce\xae\xce\xb3\xce\xbf\xcf\x81\xce\xb7 \xce\xba\xce\xb1\xcf\x86\xce\xad \xce\xb1\xce\xbb\xce\xb5\xcf\x80\xce\xbf\xcf\x8d'

これで、16 進値をバイトに変換することができました。

この記事では、fromhex()binascii.unhexlify() を使って Python で 16 進数をバイトリテラルに変換する方法を説明しました。ソースコードにインポートを追加したくない場合は fromhex() の方が良いでしょう。そうでなければ、どちらの関数も同じ出力を提供します。

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