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



>我正在尝试读取带有CAN数据的文本文件,文件的格式是这样的:

XL_CAN_EV_TAG_RX_OK 通道:0 t=51165282304 编号:98FF5C80 dlc:7 000000040000E0 XL_CAN_EV_TAG_RX_OK 通道:0 t=51172728832 编号:98FF1480 DLC:7 FFFFFFAD7C1CFF XL_CAN_EV_TAG_RX_OK 通道:0 T=51173007360 编号:98FF1080 DLC:7 FFFFE30C0E01FF XL_CAN_EV_TAG_RX_OK 通道:0 t=51173285888 编号:98FF1180 dlc:7 FFFF9706FEFFFB XL_CAN_EV_TAG_RX_OK 通道:0 T=51173564416 编号:98FF1280 DLC:7 FFFF9706FEFFFB

我必须读取CANid和CANDATA,如上所示,我设法使用以下方法读取CANIC:

unsigned int hex = 0; 
fscanf(fr, "%X", &hex); 
printf(" %X ", hex);

我使用 c = fgetc(fr(; 直到 c 读取第二个 ":" 并且十六进制读取犬科动物。

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

40000e0 D7C1CFF C0E01FF 6FEFFFB 6FEFFFB

这就是问题所在。我找到的替代方法是将其读作字符。

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

数据[0]=FF; 数据[1]=FF; 数据[2]=FF; 数据[3]=

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

我从两天开始就被困在这里,谷歌搜索了所有内容并尝试了所有内容,似乎没有任何效果,你能帮我解决这个问题吗?谢谢。

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

最新更新