如何从C中的文本文件中读取十六进制数据

1 c hex text can-bus

我试图用CAN数据读取文本文件,文件格式如下:

XL_CAN_EV_TAG_RX_OK CH:0 T = 51165282304 ID:98FF5C80 DLC:7 000000040000E0 XL_CAN_EV_TAG_RX_OK CH:0 T = 51172728832 ID:98FF1480 DLC:7 FFFFFFAD7C1CFF XL_CAN_EV_TAG_RX_OK CH:0 T = 51173007360 ID:98FF1080 DLC:7 FFFFE30C0E01FF XL_CAN_EV_TAG_RX_OK CH:0 T = 51173285888 ID :98FF1180 dlc:7 FFFF9706FEFFFB XL_CAN_EV_TAG_RX_OK ch:0 t = 51173564416 id:98FF1280 dlc:7 FFFF9706FEFFFB

我必须阅读上面看到的CANid和CANDATA,我设法使用以下内容读取CANID:

unsigned int hex = 0; 
fscanf(fr, "%X", &hex); 
printf(" %X ", hex);
Run Code Online (Sandbox Code Playgroud)

我用c = fgetc(fr); 直到c读取第二个":"并且hex读取canid罚款.

但是,当我必须使用相同的代码"fscaf"读取数据时,它只读取最后7个数据,例如,我得到如下结果:

40000e0 D7C1CFF C0E01FF 6FEFFFB 6FEFFFB

这就是问题.我发现的替代方案是将其作为char读取.

如果我使用getc读取,我得到char格式的数据,我不知道如何将其转换为十六进制,它也分别读取每个字母,我必须将它们组合,然后将其转换为int类型(十六进制) )具体并将其发送到一个数组,如下所示:

数据[0] = FF; 数据[1] = FF; 数据[2] = FF; 数据[3] = AD; 数据[4] = 7C; 数据[5] = 1C; 数据[6] = FF;

我已经被困在这里两天了,谷歌搜索了一切,尝试了一切,似乎没什么用,你能帮我解决这个问题.谢谢.

小智 5

你正在阅读unsigned int并存储到unsigned int.unsigned int是32位,您的十六进制值是7个字节或56位长.你需要一个64位的容器.您将要使用unsigned long long int和读/写它们%llX.