Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで16進数の文字列を10進数に変換する方法を解説

この記事では、16進数の文字列を10進数に変換する問題の解決策について詳しく解説します。

課題の概要

16進数形式の文字列が与えられたとき、それを対応する10進数の値に変換することを目標とします。例えば、16進数の「F」は10進数では「15」に相当します。

この問題には主に2つのアプローチがあります。

  • 力ずく(ブルートフォース)な手法:int関数を使った明示的な型変換
  • 組み込みモジュールを活用する手法:astモジュールのliteral_eval関数を使用

方法1:int関数を使った変換

最もシンプルで一般的な方法は、Pythonの組み込み関数であるint()を利用するものです。この関数は2つの引数を受け取ります。1つ目は変換対象の16進数文字列、2つ目は基数(ここでは16)です。

この関数により、16進数の文字列は整数型(int型)の10進数に変換されます。必要に応じて、さらにstr()で文字列形式に戻すことも可能です。

サンプルコード

# 入力文字列
string = 'F'
# 16進数文字列を10進数に変換
res = int(string, 16)
# 結果を出力
print("16進数文字列に対応する10進数は : " + str(res))

実行結果

16進数文字列に対応する10進数は : 15

この方法のメリットは、コードが短く直感的である点です。「0x」プレフィックスが付いていない純粋な16進数文字列に対してもそのまま適用できます。

方法2:astモジュールのliteral_eval関数を使う

もう一つの方法として、Python標準ライブラリのastモジュールにあるliteral_eval関数を使用するやり方があります。この関数は文字列をリテラル式として評価し、自動的に基数を判別した上で10進数の値へと変換します。

注意点として、この方法では入力文字列に「0x」というプレフィックスが必要です。プレフィックスがないと正しく評価されないため、入力データの形式に注意しましょう。

サンプルコード

# 組み込みモジュールliteral_evalを使用
from ast import literal_eval
# 文字列を初期化(0xプレフィックスが必要)
test_string = '0xF'
# 16進数文字列を10進数に変換
res = literal_eval(test_string)
# 結果を出力
print("16進数文字列の10進数の値は : " + str(res))

実行結果

16進数文字列の10進数の値は : 15

上記のコードでは、すべての変数はローカルスコープ内で宣言されており、実行フローもシンプルです。

まとめ

本記事では、与えられた16進数の文字列を10進数に変換する2つの方法を学びました。int(文字列, 16)による直接的な変換は手軽で汎用性が高く、ast.literal_evalを使う方法は「0x」付きのリテラル表現をそのまま評価できるのが特徴です。用途や入力データの形式に応じて、適切な方法を選択するとよいでしょう。

  1. Pythonで10進数を2進数に変換する方法|再帰処理とbin()関数の実装例

    この記事では、「10進数を2進数に変換する」という問題に対する解決策を、具体的なコード例とともにわかりやすく解説します。 問題の概要 問題: 与えられた10進数の整数を、それに対応する2進数表現へ変換する。 この問題を解くには、大きく分けて2つのアプローチがあります。順番に見ていきましょう。 方法1:再帰を使った実装 10進数を2進数に変換する基本的な考え方は、「数値を2で割り続け、その余りを記録する」ことです。再帰関数を使うと、除算を繰り返しながら余りを自動的に上位の桁から順に出力できます。 サンプルコード def DecimalToBinary(num): if num &g

  2. Pythonで10進数を2進数に変換する方法|再帰と組み込み関数の2つのアプローチ

    この記事では、10進数で表された数値を2進数に変換するPythonプログラムについて、その考え方と具体的な実装方法をわかりやすく解説します。 問題文 ある整数が与えられたとき、その数値を2進数に変換します。例えば、10進数の「35」は2進数では「100011」と表現されます。 アプローチ1:再帰を使った解法 再帰処理を利用すると、シンプルなコードで10進数を2進数に変換できます。基本的な流れは以下の擬似コードのとおりです。 DecToBin(num):     if num > 1:      &n