Python で 16 進数を ASCII に変換する
-
Python で
decode()メソッドを使用して 16 進数を ASCII に変換する -
Python で
codecs.decode()メソッドを使用して 16 進数を ASCII に変換する
このチュートリアルでは、Python で 16 進文字列を ASCII 文字列に変換するさまざまな方法について説明します。16 進形式 68656c6c6f で記述された文字列があり、これを h が ASCII コードで 68、e が 64、l が 6c、o が 6f であることから、hello という ASCII 文字列に変換したいとします。
次の方法を使用して、Python で 16 進文字列を ASCII 文字列に変換できます。
Python で decode() メソッドを使用して 16 進数を ASCII に変換する
Python 2 の string.decode(encoding, error) メソッドは、エンコードされた文字列を入力として受け取り、encoding 引数で指定されたエンコードスキームを使用してデコードします。error パラメータは、strict、ignore、および replace のエラーが発生した場合に使用するエラー処理スキームを指定します。
したがって、16 進文字列を ASCII 文字列に変換するには、string.decode() メソッドの encoding パラメータを hex として設定する必要があります。以下のサンプルコードは、Python 2 で string.decode() メソッドを使用して 16 進数を ASCII に変換する方法を示しています。
string = "68656c6c6f"
string.decode("hex")
出力:
hello
Python 3 では、bytearray.decode(encoding, error) メソッドはバイト配列を入力として受け取り、encoding 引数で指定されたエンコードスキームを使用してデコードします。
Python 3 で文字列をデコードするには、最初に文字列をバイト配列に変換してから、bytearray.decode() メソッドを使用して文字列をデコードする必要があります。bytearray.fromhex(string) メソッドを使用して、最初に文字列をバイト配列に変換できます。
以下のサンプルコードは、bytearray.decode() および bytearray.fromhex(string) メソッドを使用して、Python 3 で 16 進文字列を ASCII 文字列に変換する方法を示しています。
string = "68656c6c6f"
byte_array = bytearray.fromhex(string)
byte_array.decode()
出力:
hello
Python で codecs.decode() メソッドを使用して 16 進数を ASCII に変換する
codecs.decode(obj, encoding, error) メソッドは decode() メソッドに似ています。オブジェクトを入力として受け取り、encoding 引数で指定されたエンコードスキームを使用してデコードします。error 引数は、エラーの場合に使用されるエラー処理スキームを指定します。
Python 2 では、codecs.decode() は出力として文字列を返し、Python 3 ではバイト配列を返します。以下のサンプルコードは、codecs.decode() メソッドを使用して 16 進文字列を ASCII に変換し、str() メソッドを使用して返されたバイト配列を文字列に変換する方法を示しています。
import codecs
string = "68656c6c6f"
binary_str = codecs.decode(string, "hex")
print(str(binary_str, "utf-8"))
出力:
hello