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;
}