Python hex()の使い方5つ

Python hex()関数は、16進数を簡単に変換して活用できる強力なツールです。Pythonで数値をさまざまな形式で表現できる機能は、プログラミングにおいて非常に便利です。その中でも、16進数はコンピュータ内部でデータを処理する際に頻繁に使われる重要な概念です。この記事では、hex()関数の使い方とその応用方法について簡単に説明します。

Python hex()関数とは?

hex()関数はPythonの組み込み関数で、整数を16進数の文字列に変換します。16進数は、数字の0から9、およびAからFまでの16種類の文字で表現する方式です。10進数とは異なり、16進数では1桁でより多くの数字を表現できるため、データ処理やメモリアドレスの指定などで多く使われます。

hex()関数の基本的な使い方

hex()関数は、単に整数を16進数に変換する役割を果たします。返される値は文字列形式ですが、内部では16進数として認識できます。Pythonで16進数に変換するには、次のようにhex()関数を使用します。

Python
number = 255
hex_number = hex(number)
print(hex_number)

このコードでは、数値255を16進数に変換すると、結果は0xffになります。0xは、その数字が16進数であることを示す表記です。

図1. Python hex() 関数で10進数を16進数の文字列に変換
図1. Python hex() 関数で10進数を16進数の文字列に変換

このとき重要なのは、0xが常に付くことです。この表記は16進数を示す標準です。

負の数の変換

Pythonで負の数をhex()関数で変換すると、符号がそのまま付いた状態で16進数に変換されます。

Python
n = -42
hex_value = hex(n)
print(hex_value)

この例では、-42が16進数に変換され、-0x2aになります。負の数の場合も0xが付きますが、符号はそのまま保持されます。

図2. Python hex() 関数で負の10進数を負の16進数の文字列に変換
図2. Python hex() 関数で負の10進数を負の16進数の文字列に変換

int()関数との組み合わせ

hex()は16進数に変換する際に使用されますが、逆に16進数の文字列を再び整数に変換する場合は、int()関数を使用できます。int()関数の2番目の引数に16を指定すると、16進数の文字列を再び10進数に変換することができます。

Python
hex_value = '0xff'
decimal_value = int(hex_value, 16)
print(decimal_value)

このコードでは、0xffという16進数の文字列を再び10進数の整数に変換した結果が255になります。

図3. int()で16進数の文字列を10進数に変換
図3. int()で16進数の文字列を10進数に変換

Python hex()を使わずフォーマットで出力

Pythonでは、文字列フォーマットを使用して、より精密な16進数の出力を行うことができます。特にformat()関数やf-stringを使用すれば、hex()関数を使わずとも簡単に16進数の出力が可能です。

Python
n = 255
format(n, 'x')
format(n, '#x')

formatted_hex = f'{n:#x}'
print(formatted_hex)

formatted_hex_no_prefix = f'{n:x}'
print(formatted_hex_no_prefix)

この方法では、数字を16進数に変換しつつ、0x表記を含めたり除外したりといった細かい制御が可能です。

図4. f-stringやformat()を使用して16進数に変換
図4. f-stringやformat()を使用して16進数に変換

大文字での出力

hex()関数で出力される16進数は、基本的に小文字で表示されます。もし大文字で出力したい場合は、upper()メソッドを併用できます。

Python
n = 255
hex_value = hex(n).upper()
print(hex_value)
図5. Python hex() 関数とupper()関数を併用して大文字表記
図5. Python hex() 関数とupper()関数を併用して大文字表記

この方法により、16進数の文字を大文字で表示させることができます。また、以下のようにf-stringやformat()を使用する際にも大文字での出力が可能です。

Python
n = 255
formatted_hex = f'{n:#X}'
print(formatted_hex)
format(n, '#X')
図6. Python f-stringやformat()を使用した大文字の16進数変換
図6. Python f-stringやformat()を使用した大文字の16進数変換

16進数の実生活での応用

16進数は主にコンピュータサイエンスにおいて、メモリアドレスの表示や色コードの定義に使用されます。例えば、ウェブで使用される色コードは16進数で表され、これはRGB値(赤、緑、青)を組み合わせた形となっています。

HTML
<div style="color: #FF5733;">Hello World</div>

また、メモリアドレスを処理したり、低レベルのシステムプログラミングでデータを扱う場合も、16進数は重要な役割を果たします。これにより、より効率的なデータの表現と処理が可能になります。例えば、Linuxにはxxdというコマンドがあります。このコマンドを使うと、ファイルの内部の値を16進数で確認できます。

図7. Linuxコマンドxxdでファイルの内容を16進数で閲覧
図7. Linuxコマンドxxdでファイルの内容を16進数で閲覧

hex() 使用時の注意事項

hex()関数を使用する際には、いくつか注意すべき点があります。

  • 文字列と整数の混同: hex()関数は整数を16進数の文字列に変換するため、返された値を再び数値として使用するには、int()関数で再変換する必要があります。
  • 浮動小数点数: hex()関数は浮動小数点数(float)を直接変換することはできません。そのため、浮動小数点数を変換するには別途処理が必要です。
Python
float_number = 3.14
hex(float_number)

この場合、浮動小数点数は整数に変換した後にhex()を使用する方法で解決できます。浮動小数点数をそのまま使用すると、以下のように"TypeError: 'float' object cannot be interpreted as an integer"というエラーメッセージが表示されます。

図8. Python hex() 関数に浮動小数点数を代入したときに発生するエラーメッセージ
図8. Python hex() 関数に浮動小数点数を代入したときに発生するエラーメッセージ

まとめ

今回は、Pythonでhex()関数を使用して10進数を16進数に変換する方法について説明しました。hex()関数は非常にシンプルですが、コンピュータプログラミングにおいて不可欠なツールです。これにより、データを効率的に扱うことができ、色コードやメモリアドレスなど、さまざまな場面で活用できます。また、int()関数との組み合わせや文字列フォーマットを通じて、より多様な方法で16進数を処理することができます。

Pythonを活用して、低レベルのデータ処理やシステムプログラミングを行う際、hex()関数は迅速かつ簡単に16進数に変換するための重要な機能として活用できます。

リファレンス

関連ポスト

コメントする