【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埋めするための指定です。

%xを%Xにすると16進数表記のアルファベットが大文字になります。

ビット演算子を使った変換

ビット演算子を使用することでも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だけ取得するためのマスクです。

このコードではループ処理を行っていませんが、ループ処理させて任意の桁数に対応することも可能です。

最後に'\0'(ヌル文字)で終わる必要がある点に注意してください。

以上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進数への変換方法は、各桁ごとに値を計算し合わせていくことで実現できます。

十分な理解があれば、どちらも簡単に行えるようになるはずです。

目次