如何在C语言中将字符串转换为十六进制值

24

我有一个字符串"6A",如何将其转换为十六进制值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.

1
通过使用val=strtol(string, NULL, 16);,它会返回一个long类型,因此您可能需要检查/转换它。 - Weather Vane
2
这并不应该被点踩。这是一个真实的问题。 - Allamaprabhu
1
@mah 希望现在达到了目的。 - Allamaprabhu
1
char c[2]="6A"是一个问题。应该是char c[]="6A" 或者 char c[3]="6A"。除非它有一个终止空字符,否则c不是一个字符串。 - chux - Reinstate Monica
请查看此答案 https://stackoverflow.com/a/46586095/5842403 - Joniale
显示剩余3条评论
1个回答

63

这个问题经常被问到,但问题并不完全正确。更好的问题应该是:

“如何将十六进制字符串转换为整数值?”

原因是计算机以二进制方式存储整数(或字符或长整数)值。

"6A" = 01101010

只有在人类表示(以字符字符串形式)中,一个值才以某种符号表示法表达出来。

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

这些都以不同的方式表示相同的值。

但回答这个问题,如何将十六进制字符串转换为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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接