如何从C

时间:2018-10-14 19:21:21

标签: c text hex 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);

我使用c = fgetc(fr);直到c读取第二个“:”,十六进制读取犬科动物罚款。

但是,当我不得不使用相同的代码“ fscaf”读取数据时,例如,它仅读取最后7个数据,我得到的结果如下:

40000e0 D7C1CFF C0E01FF 6FEFFFB 6FEFFFB

这是问题所在。我发现的替代方法是将其读取为char。

如果我使用getc进行读取,则会以char格式获取数据,我不确定如何将其转换为十六进制,而且它会分别读取每个字母,因此我必须将它们组合然后将其转换为int专门键入(十六进制)并将其发送到数组,如下所示:

  

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

两天以来,我一直被困在这里,用Google搜索一切,尝试了一切,似乎没有任何效果,请您帮我解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:5)

您正在读取unsigned int并存储到unsigned int中。 unsigned int为32位,您的十六进制值为7个字节或56位长。您需要一个64位的容器。您将要使用unsigned long long int并用%llX对其进行读写。