C/C++で16進数の文字列を16進数の整数に変換する方法
C/C++で16進数の文字列を16進数の整数に変換する方法を紹介します。
1.問題点
下記の、16進数を変数に代入し、それをさらに別の変数に代入して表示するプログラムを作りました。
#include <stdio.h>
int main(int argc, char *argv[]) {
int data, result;
data = 0x0a; // 16進数
result = data;
printf("data:%#.2x(%d)\n", result, result);
return 0;
}
実行結果
% ./a.out
data:0x0a(10)
プログラムの中で16進数を代入した場合、期待通りに代入および表示することができますが、引数で16進数を受け取った場合、文字列として扱われるため、プログラム内で整数に変換する方法が分かりません。
2.16進数の文字列を16進数の整数に変換する
16進数の文字列を16進数の整数に変換するにはsscanf()を利用します。
#include <stdio.h>
int main(int argc, char *argv[]) {
int data, result;
sscanf(argv[1], "%x", &data);
result = data;
printf("argv[1]:%s => data:%#.2x(%d)\n", argv[1], result, result);
return 0;
}
実行結果(第1パラメータに16進数指定)
% ./a.out 0x0a
data:0x0a(10)
sscanf()は、第1パラメータで示す文字列ポインタからの入力を読み込み、第2パラメータのフォーマットで第3パラメータ以降の変数に代入する関数です。
第3パラメータ以降はアドレス指定でなくてはいけません。
Posted by yujiro このページの先頭に戻る
トラックバックURL
コメントする
greeting