我正在制作一个程序来与串行设备通信。设备正在给我十六进制格式的数据。我得到的十六进制格式是FFFFFF84,但我有兴趣提取最后两位84。那我怎么提取呢?

while(1)
{
int i;
char receivebuffer [1];
read (fd, receivebuffer, sizeof receivebuffer);
for ( i = 0; i < sizeof (receivebuffer); i++)
{
   printf("value of buffer is %X\n\n", (char)receivebuffer[i]);

}
return 0;
}

我正在接收缓冲区中获取数据。请帮忙谢谢。

最佳答案

您只是感到困惑,因为printf将您的数据打印为符号扩展的int(这意味着您的系统char上的char被视为符号-请注意,这是实现定义的)。
printf更改为:

printf("value of buffer is %#X\n\n", (unsigned char)receivebuffer[i]);

或者将receivebuffer类型设为无符号:
unsigned char receivebuffer[1];

// ...

printf("value of buffer is %#X\n\n", receivebuffer[i]);

关于c - 如何从十六进制值提取低位字节?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29139767/

10-10 17:01