我对C很陌生。 我想将十六进制数字的字符串表示形式转换为实际的十六进制数字吗?
#include <stdio.h>
int main()
{
char buf[8] = "410C0000";
printf("%s\n",buf);
return 0;
}
我想将字符串分解成4个独立的十六进制数字。 我可以进一步处理以进行计算:
0x41 0x0C 0x00 0x00
答案 0 :(得分:1)
您可以使用sscanf
,它是scanf
的变体,它从字符串而不是从stdin或文件中读取。格式说明符%X
指定将输入视为十六进制数,%02X
另外表示要精确地读取两位数,%02hhX
另外定义将结果存储到一个字节(即{ {1}},而不是大概64位的整数值。
代码如下:
unsigned char
输出:
int main()
{
char buf[8] = "410C0000";
unsigned char h0=0, h1=0, h2=0, h3=0;
sscanf(buf+6, "%02hhX", &h0);
sscanf(buf+4, "%02hhX", &h1);
sscanf(buf+2, "%02hhX", &h2);
sscanf(buf+0, "%02hhX", &h3);
printf("0x%02X 0x%02X 0x%02X 0x%02X\n",h3, h2, h1, h0);
return 0;
}
BTW:0x41 0x0C 0x00 0x00
-的大小为8-将不包含以buf
结尾的字符串,因此您将无法在'\0'
中使用它。如果您也想使用printf
作为字符串,例如,写char buf[9]
。编写buf
时。