C语言字符串和16进制转换的问题
#include <stdio.h>
#include <string.h>
int main()
{
int hex_val;
char *token;
unsigned char buf[] = "0x01,0x03,0x00,0xC8,0x00,0x03,0x84,0x35";
int i=0;
char s[100];
token = strtok (buf, ",");
while (NULL != token)
{
sscanf (token, "%x", &hex_val);
s[i]=hex_val;
token = strtok (NULL, ",");
i++;
}
int n;
for(n=0;n<8;n++)
{
printf("%02x,",s[n]);
}
printf("\n");
return 0;
}
我这段代码执行后显示的结果是:01,03,00,ffffffc8,00,03,ffffff84,35
我想要的结果是01,03,00,c8,00,03,84,35,多出一写ffffff,该怎么处理一下,谢谢!
[解决办法]
char型数据在编译的时候,会被提升到32位,由于是有符号,最高位不幸是1的话,高24位为全f.
所以用unsigned char