Мне нужно прочитать в файле Intel Hex, который выглядит примерно так:
:0300000002F8D42F
:07000300020096000000005E
:07000B000200B50000000037
:030013000200D414
:03001B000200F3ED
(Да, некоторые строки отсутствуют, а иногда 1 строка содержит только 1 байт)
: Это стартовый код
Первые 2 байта - это число байтов
Следующие 4 адреса в памяти
Следующая 2 - тип записи
Остальные данные (кроме последних 2 байтов)
последние 2 байта являются контрольной суммой
Подробнее здесь (википедия)
Мне нужно в конечном итоге что-то вроде этого (без периодов, только для удобства чтения):
:10.addr.RT.10bytesofdata.CK
Если в файле нет данных для адреса, я заполняю его 'FF'
Итак, каков наилучший способ считывания и сохранения такого файла, если мне нужно разделить и отсортировать информацию по адресу, байт за байтом.
Я надеялся читать побайтово (?), Сохраняя соответствующие значения в двумерном целочисленном массиве, упорядоченном по адресу.
[BC][ADDR][RT][b1][b2][b3][b4][b5][b6][b...16][ck]
[BC][ADDR][RT][b1][b2][b3][b4][b5][b6][b...16][ck]
...
Я бы хотел избежать использования строк, чтобы легче было вычислять контрольные суммы.
Также я использую Visual Studio.
Спасибо за помощь, я могу опубликовать больше информации, если это не было достаточно ясно.
Обновление Так что сейчас я думаю, что я читаю что-то вроде этого:
fscanf_s(in_file,"%2X", &BC);
fscanf_s(in_file,"%4X", &ADDR);
fscanf_s(in_file,"%2X", &RT);
Я распечатаю в файл, подобный этому:
fprintf_s(out_file,"%2X", BC);
fprintf_s(out_file,"%04X", ADDR); //this pads with zeros if needed and forces 4 "digits"
fprintf_s(out_file,"%2X", RT);
Сейчас я работаю над подпрограммой для данных. Дайте мне знать, если у кого-нибудь есть хорошие идеи. Спасибо