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

How to read a hex data from a text file in C

我正在尝试读取一个包含 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 读取第二个“:”并且 hex 读取 canid 罚款。

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

40000e0 D7C1CFF C0E01FF 6FEFFFB 6FEFFFB

这就是问题所在。我发现的另一种方法是将其读作 char。

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

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

两天以来我一直被困在这里,用谷歌搜索了一切并尝试了一切,似乎没有任何效果,你能帮我解决这个问题吗?谢谢你。

您正在读取 unsigned int 并存储到 unsigned intunsigned int 是 32 位,您的十六进制值是 7 个字节或 56 位长。你需要一个 64 位的容器。您需要将 unsigned long long int 和 read/write 与 %llX 一起使用。