如何从 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 int
。 unsigned int
是 32 位,您的十六进制值是 7 个字节或 56 位长。你需要一个 64 位的容器。您需要将 unsigned long long int
和 read/write 与 %llX
一起使用。
我正在尝试读取一个包含 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,我设法使用 :
读取了 CANIDunsigned 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 int
。 unsigned int
是 32 位,您的十六进制值是 7 个字节或 56 位长。你需要一个 64 位的容器。您需要将 unsigned long long int
和 read/write 与 %llX
一起使用。