我试图读取一个带有CAN数据的文本文件,该文件的格式如下:
XL_CAN_EV_TAG_RX_OK ch:0 t=51165282304 id:98FF5C80 dlc:7000000040000E0 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);我使用c= fgetc(fr);直到c读取第二个":“,而十六进制则读取canid罚款。
但是,当我必须使用相同的代码"fscaf“读取数据时,它只读取最后7个数据--例如,我得到如下结果:
40000e0 D7C1CFF C0E01FF 6FEFFFB 6FEFFFB
这就是问题所在。我发现的另一种选择是把它读成焦炭。
如果我使用getc读取,我会得到char格式的数据,我不知道如何将它转换为十六进制,并且它分别读取每个字母,我必须将它们组合起来,然后具体地将它们转换为int类型(十六进制),然后将其发送到数组中,如下所示:
data=FF;data1=FF;data2=FF;data3=AD;data4=7C;data5=1C;data6=FF;
我被困在这里已经两天了,搜索了所有的东西,尝试了所有的东西,似乎什么都没有用,你能帮我解决这个问题吗?谢谢。
发布于 2018-10-14 19:25:02
您正在读取unsigned int并将其存储到unsigned int中。unsigned int是32位,您的十六进制值是7字节或56位长。你需要一个64位的容器。您将需要使用unsigned long long int并使用%llX读写它们。
https://stackoverflow.com/questions/52806266
复制相似问题