16進数と10進数の相互変換は使用する機会が多く、データ解析やハードウェア制御など、様々な分野で活用されています。
本記事では、Pythonを使って16進数の文字列と10進数の数値を相互変換する方法を、初心者にもわかりやすく解説します。
Pythonで16進数と10進数を相互変換する方法
Pythonでは、16進数と10進数を相互に変換する方法がいくつかあります。
この記事では、それぞれの変換方法を詳しく解説していきます。
16進数から10進数への変換
16進数の文字列を10進数の数値に変換する方法には、 int()
関数と format()
関数の2つの方法があります。
int()関数
を使用した方法
int()
関数は、引数に与えられた数値や文字列を整数に変換する関数です。
16進数の文字列を10進数に変換するには、 int()
関数の第2引数に基数(16進数の場合は16)を指定します。
hex_str = "1a"
dec_num = int(hex_str, 16)
print(dec_num) # 実行結果: 26
この例では、16進数の文字列"1a"
を10進数の数値26
に変換しています。
format()関数
を使用した方法
format()
関数は、文字列の書式を整形する関数です。
16進数の文字列を10進数に変換するには、 format()
関数の書式指定子に'd'
(10進数)を指定します。
hex_str = "1a"
dec_num = int(format(int(hex_str, 16), 'd'))
print(dec_num) # 実行結果: 26
この例でも、16進数の文字列"1a"
を10進数の数値26
に変換しています。
10進数から16進数への変換
10進数の数値を16進数の文字列に変換する方法には、 hex()
関数と format()
関数の2つの方法があります。
hex()関数
を使用した方法
hex()
関数は、引数に与えられた整数を16進数の文字列に変換する関数です。
dec_num = 26
hex_str = hex(dec_num)
print(hex_str) # 実行結果: '0x1a'
この例では、10進数の数値26
を16進数の文字列'0x1a'
に変換しています。
ただし、 hex()
関数で変換された文字列には'0x'
が付加されるため、必要に応じて[2:]
でスライスして取り除くことができます。
hex_str = hex_str[2:]
print(hex_str) # 実行結果: '1a'
format()関数
を使用した方法
format()
関数を使って10進数の数値を16進数の文字列に変換するには、書式指定子に'x'
(16進数)を指定します。
dec_num = 26
hex_str = format(dec_num, 'x')
print(hex_str) # 実行結果: '1a'
この例でも、10進数の数値26
を16進数の文字列'1a'
に変換しています。
これで、Pythonで16進数と10進数を相互変換する方法を学びました。
これらの方法を使って、さまざまな数値変換を行うことができます。
エラー処理とデバッグ方法
プログラミングを行っていると、様々な
16進数の文字列と10進数の数値を相互変換する際にエラーが発生することがあります。
続いては、それらエラーの対処法について解説します。
16進数表記のエラー
16進数表記には、0-9の数字とA-F(またはa-f)のアルファベットが使用されます。
しかし、誤ってG-Z(またはg-z)のアルファベットやその他の記号を含めてしまうと、エラーが発生します。
例えば、以下のようなコードを実行するとエラーが発生します。
hex_string = "1G"
decimal_number = int(hex_string, 16)
ValueError: invalid literal for int() with base 16: '1G'
この場合、ValueError
が発生します。
エラーを回避するためには、16進数表記の文字列が正しいかどうかを確認する必要があります。
以下のように正規表現を使ってチェックすることができます。
import re
hex_string = "1G"
if re.match("^[0-9a-fA-F]+$", hex_string):
decimal_number = int(hex_string, 16)
else:
print("16進数表記が正しくありません")
16進数表記が正しくありません
変換関数のエラー
変換関数 int()
や hex()
を使用する際に、引数が正しくない場合にエラーが発生することがあります。
例えば、 int()
関数に16進数表記の文字列を渡す際に、基数を指定し忘れるとエラーが発生します。
hex_string = "1A"
decimal_number = int(hex_string) # 基数を指定し忘れている
ValueError: invalid literal for int() with base 10: '1A'
この場合、ValueError
が発生します。
エラーを回避するためには、基数を正しく指定する必要があります。
hex_string = "1A"
decimal_number = int(hex_string, 16) # 基数を正しく指定
演算時のエラー
16進数の文字列や10進数の数値を相互変換した後、演算を行う際にエラーが発生することがあります。
例えば、16進数の文字列を10進数に変換した後、文字列として連結しようとするとエラーが発生します。
hex_string1 = "1A"
hex_string2 = "2B"
decimal_number1 = int(hex_string1, 16)
decimal_number2 = int(hex_string2, 16)
result = decimal_number1 + decimal_number2
print("結果:" + result) # 文字列と数値の連結はエラーが発生する
TypeError: can only concatenate str (not "int") to str
この場合、TypeError
が発生します。
エラーを回避するためには、数値を文字列に変換してから連結する必要があります。
hex_string1 = "1A"
hex_string2 = "2B"
decimal_number1 = int(hex_string1, 16)
decimal_number2 = int(hex_string2, 16)
result = decimal_number1 + decimal_number2
print("結果:" + str(result)) # 数値を文字列に変換してから連結
結果:69
これらのエラー処理方法を理解し、適切に対処することで、16進数の文字列と10進数の数値を相互変換するプログラムを正しく動作させることができます。