【C言語】10進数の数値と16進数の文字列を相互変換する方法

はじめに、C言語で10進数と16進数の変換方法について詳しく解説していきます。
c言語での10進数から16進数への変換方法
c言語で10進数から16進数への変換を行うには、以下のような方法があります。
sprintf関数を使った変換
sprintf関数を使用することで、文字列として16進数表現を得ることが出来ます。具体的には、以下のようなコードになります。
int num = 255;
char hex[3];
sprintf(hex, "%02x", num);
printf("%d(10) = %s(16)\n",num, hex);
255(10) = ff(16)
この場合、numに10進数の値255が格納されており、hex配列には”ff”という文字列が格納されます。%02xでは2桁未満の場合、足りない桁数を0埋めするための指定です。
ビット演算子を使った変換
ビット演算子を使用することでも10進数から16進数への変換が可能です。具体的には、以下のようなコードになります。
int num = 255;
int mask = 15; // 下位4bitだけ取得するマスク
char hex[3];
hex[0] = "0123456789abcdef"[num & mask];
hex[1] = "0123456789abcdef"[(num >> 4) & mask];
hex[2] = '\0';
printf("%d(10) = %s(16)\n",num, hex);
255(10) = ff(16)
この場合もnumに10進数の値255が格納されています。maskは下位4bitだけ取得するためのマスクです。
このコードではループ処理を行っていませんが、ループ処理させて任意の桁数に対応することも可能です。
以上2つの方法で10進数から16進数へ簡単かつ正確な変換が可能です。
c言語での16進数から10進数への変換方法
c言語で16進数から10進数への変換方法を紹介します。
方法1:sscanf関数を使う
#include <stdio.h>
int main() {
char hex[] = "2A"; // 変換する16進数値
int dec;
sscanf(hex, "%x", &dec); // 16進数値を10進数に変換
printf("%d\n", dec); // 結果を出力
return 0;
}
42
上記のコードでは、sscanf()
関数を使用して、文字列形式の16進数値(hex
)を整数型の10進数(dec
)に変換しています。%x
は、入力された文字列が16進表現であることを示すフォーマット指定子です。
方法2:strtol関数を使う
#include <stdio.h>
#include <stdlib.h>
int main() {
char hex[] = "2A"; // 変換する16進数値
long int dec;
dec = strtol(hex, NULL, 16); // 16進表現からlong int型の10進表現に変換
printf("%ld\n", dec); // 結果を出力
return(0);
}
42
上記のコードでは、strtol()
関数が使用されています。
この関 数は、第一引 数に与えられた文字列 hex
を第三引 数で指定した基底(今回は 16
) の進数に変換し、その結果をlong int型の整数値して返します。
以上がc言語での16進法から10進数の数値への変換方法です。
まとめ
c言語での10進数から16進数への変換方法は、「/」演算子と「%」演算子を使って商と余りを求めていくことで実現できます。
また、16進数から10進数への変換方法は、各桁ごとに値を計算し合わせていくことで実現できます。
十分な理解があれば、どちらも簡単に行えるようになるはずです。