web-dev-qa-db-ja.com

Cで文字列を16進値に変換する方法

文字列「6A」を持っていますが、どのように16進値6Aに変換できますか?

Cでの解決を手伝ってください

私は試した

char c[2]="6A"
char *p;
int x = atoi(c);//atoi is deprecated 

int y = strtod(c,&p);//Returns only first digit,rest it considers as string and
//returns 0 if first character is non digit char.
8
Allamaprabhu

質問

「文字列を16進値に変換するにはどうすればよいですか?」

よく聞かれますが、それは正しい質問ではありません。より良いでしょう

「16進文字列を整数値に変換するにはどうすればよいですか?」

その理由は、整数(またはcharまたはlong)値がバイナリ形式でコンピューターに保存されるためです。

"6A" = 01101010

値が1つの表記法または別の表記法で表現されるのは、人間の表現(文字列)のみです

"01101010b"   binary
"0x6A"        hexadecimal
"106"         decimal
"'j'"         character

すべて異なる方法で同じ値を表します。

しかし、質問への回答では、16進文字列をintに変換する方法

char hex[] = "6A";                          // here is the hex string
int num = (int)strtol(hex, NULL, 16);       // number base 16
printf("%c\n", num);                        // print it as a char
printf("%d\n", num);                        // print it as decimal
printf("%X\n", num);                        // print it back as hex

出力:

j
106
6A
32
Weather Vane