首页 文章

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

提问于
浏览
1

我正在尝试用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;数据[1] = FF;数据[2] = FF;数据[3] = AD;数据[4] = 7C;数据[5] = 1C;数据[6] = FF;

我已经被困在这里两天了,谷歌搜索了一切,尝试了一切,似乎什么都没有用,你能帮我解决这个问题 . 谢谢 .

1 回答

  • 5

    你正在读 unsigned int 并存入 unsigned int . unsigned int 是32位,十六进制值是7个字节或56位长 . 你需要一个64位的容器 . 您将要使用 unsigned long long int 并使用 %llX 读/写它们 .

相关问题