我试图用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.