Как прочитать шестнадцатеричные данные из текстового файла в C - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь прочитать текстовый файл с данными CAN, формат файла примерно такой:

XL_CAN_EV_TAG_RX_OK ch: 0 t = 51165282304 id: 98FF5C80 dlc: 7 000000040000E0 XL_CAN_EV_TAG_RX_O0 т = 51172728832 ID: 98FF1480 DLC: 7 FFFFFFAD7C1CFF XL_CAN_EV_TAG_RX_OK ч: 0 т = 51173007360 ID: 98FF1080 DLC: 7 FFFFE30C0E01FF XL_CAN_EV_TAG_RX_OK ч: 0 т = 51173285888 ID: 98FF1180 DLC: 7 FFFF9706FEFFFB XL_CAN_EV_TAG_RX_OK ч: 0 т = 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

Это проблема.Альтернатива, которую я нашел, состоит в том, чтобы прочитать это как символ.

Если я использую getc для чтения, я получаю данные в формате char, я не уверен, как преобразовать это в шестнадцатеричный код, а также он читает каждую букву отдельно, и мне нужно объединить их, а затем преобразовать ихв частности, в тип int (hex) и отправьте его в массив, примерно так:

data [0] = FF;Данные [1] = FF;Данные [2] = FF;Данные [3] = АД;Данные [4] = 7C;Данные [5] = 1С;data [6] = FF;

Я застрял здесь два дня, все погуглил и все перепробовал, похоже, ничего не работает, не могли бы вы помочь мне с этим.Спасибо.

1 Ответ

0 голосов
/ 14 октября 2018

Вы читаете unsigned int и сохраняете в unsigned int.unsigned int составляет 32 бита, ваши шестнадцатеричные значения имеют длину 7 байт или 56 бит.Вам нужен 64-битный контейнер для тех.Вы захотите использовать unsigned long long int и читать / записывать их с %llX.

...