さて, 16 進表記
において,
が成立しますから, 10 進表記の数を 16 で割っていき, その余りを
下の桁から順に書いていけば, 自動的に 16 進表記ができる事になります.
下のプログラムは, 符号無し int 型の 10 進表記を 16 進表記に変換する プログラムで, 簡単のために 16 進の出力は先頭部分に 0 の列が現れる様に なってます. プログラム内で, do - while 文が現れています. これは, 既に現れた while 文と同様ですが, まず最初に do を一度実行してから while 判定が行われて, その後判定結果が偽になるまで doの { } で 囲まれた部分が繰り返されます.
文字列リテラル(literal)
ANSI の規格では, 2重引用符 " で囲まれた文字列は, 「文字列リテラル」 と呼ばれます.
C言語の文字列は最期に '\0 のついた char 型配列です.下のプログラムでは,
char output[]="00000000"; char moji[]="0123456789ABCDEF";
の部分は, 文字列リテラルを用いた文字列(char 型配列変数)の初期化です.
/* File name 10-3.c */
#include <stdio.h>
#define BUFFSIZE 1024
main()
{
char input[BUFFSIZE];
char output[]="00000000";
char moji[]="0123456789ABCDEF";
unsigned int decimal, residue;
int radix=16;
int i=1;
printf("Input a decimal number.>>");
fgets(input, BUFFSIZE, stdin);
sscanf(input, "%ud", &decimal);
do{
residue = decimal%radix;
decimal = decimal/radix;
output[8-i] = moji[residue];
i++;
} while(decimal != 0);
printf("Its hexadecimal notation is 0x%s.\n", output);
}