HOWTO · C
C で 16 進値を出力する
この記事では、C プログラミング言語で 16 進値を出力する方法について説明します。
このページの内容
Cで整数を16進数で表示するには、printf に %x を指定すると英字が小文字に、%X を指定すると大文字になります。たとえば printf("%x", 252); は fc を表示します。
Cで整数を16進数として表示する
16進数は、整数を基数16で表す方法です。数字の0~9と英字のa~f(またはA~F)を使います。これは値の表示方法であり、Cの独立したデータ型ではありません。数値は適切な整数型に格納し、printf の変換指定子によって表示形式を選びます。引数の型は変換指定子に合わせる必要があります。%x と %X が受け取る引数は、通常の整数昇格後の unsigned int です。
scanf は入力用の別の操作です。16進数の入力には使えますが、すでに表示する値がある場合は必要ありません。
16進数の英字を小文字または大文字で表示する
16進数の英字を小文字にするには %x を使います。たとえば fc のように表示されます。大文字にするには %X を使い、FC のように表示します。どちらの変換指定子も同じ整数値を表し、違うのは英字の大小だけです。書式文字列では数値を表示したい位置に変換指定子を置き、それに合った整数の引数を printf に渡します。
接頭辞、表示幅、先頭のゼロを指定する
# フラグは代替形式を指定します。ゼロ以外の16進数では、%x に 0x、%X に 0X の接頭辞を付けます。値がゼロの場合、接頭辞は付きません。フィールド幅は出力全体の最小幅で、接頭辞も幅に含まれます。たとえば %10x は、少なくとも10文字分の幅で数字を右寄せします。精度を指定しない場合は、%010x のように 0 フラグを加えると左側がゼロで埋められます。
整数の精度は、16進数の桁数の最小値を指定します。たとえば %.8x は、先頭にゼロを補って少なくとも8桁にします。精度を指定すると 0 フラグは無視されます。# と幅または精度を組み合わせると、接頭辞と桁数をまとめて指定できます。たとえば %#10.8x は、代替形式を使い、最小幅10文字の中で少なくとも8桁を指定します。
10進整数を16進数に変換する
252を手計算で変換するには、16で割り、余りを記録します。252を16で割ると商は15、余りは12です。15を16で割ると商は0、余りは15です。余りを逆順に読みます。余り15は f、余り12は c なので、252は16進数で fc です。整数の引数を受け取った printf がこの変換を行うため、手計算は結果を理解する助けになりますが、プログラム内で必須の手順ではありません。
完全な例をコンパイルして実行する
次の完全なCプログラムは、同じ値を英字の大小を変えて表示し、続けて表示幅、ゼロ埋め、代替形式、精度も示します。この例はここでは実行していないため、観測済みの出力は記載していません。使用している環境での表示を確認するには、Cコンパイラでコンパイルしてください。
#include <stdio.h>
int main(void) {
unsigned int value = 252;
printf("lowercase: %x\n", value);
printf("uppercase: %X\n", value);
printf("width: [%10x]\n", value);
printf("zeroes: [%010x]\n", value);
printf("prefix: [%#x]\n", value);
printf("precision: [%.8x]\n", value);
printf("zero with alternate form: [%#x]\n", 0u);
return 0;
}