Создание двоичного файла из IntelHex в C # - PullRequest
2 голосов
/ 02 июня 2010

Я пытаюсь создать двоичный файл из файла intelHex. Помимо файла intelHex, у меня есть данные и адрес, по которым я должен записать данные в двоичном файле. Файл IntelHex выглядит так

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

Итак, у меня есть 4 строки с данными, так как последняя говорит нам, что это конец файла. Вот что я делаю для создания файла

        while (!streamReader.EndOfStream)
        {
            string temp = String.Empty;
            int address = 0;
            line = streamReader.ReadLine();
            // Get address for each data
            address = Convert.ToInt32(line.Substring(3, 4), 16);
            // Get data from each line
            temp = line.Substring(7, 2);
            if (temp == "01")
                break;
            else
            {
                temp = line.Substring(9, line.Length - 11);
                string[] array = new string[(temp.Length / 2)];
                int j = 0;
                for (int i = 0; i < array.Length; ++i)
                {
                    array[i] = temp[j].ToString() + temp[j + 1].ToString();
                    j = j + 2;
                }
                temp = String.Empty; 
                for (int i = 0; i < array.Length; ++i)
                {
                    temp = temp + Convert.ToChar(Convert.ToInt32(array[i], 16));

                }
            }
            binaryWriter.Seek(address, SeekOrigin.Begin);
            binaryWriter.Write(temp);
            binaryWriter.Flush();
        }
        Console.WriteLine("Done...\nPress any key to exit...");

Проблема здесь в том, что данные в двоичном файле в некоторых местах не равны данным из файла intelHex. Похоже, в файл добавлены случайные данные, и я не знаю откуда. Впервые увидел, что перед данными из файла intelHex есть дополнительные данные. Например, первая строка данных начинается с 21, но в двоичном файле у меня число 12 перед 21. Я не знаю, что здесь не так. Надеюсь, что кто-то может мне помочь или направить меня, где я могу найти полезную информацию о создании бинарных файлов в C #

1 Ответ

2 голосов
/ 02 июня 2010

<Общий ответ, указывающий, что символ Unicode (char) не является октетом (байтом), и что код выдает неправильный вывод, поскольку двоичные данные записываются в файл в виде строки Unicode.>

Подсказка: используйте байт [] для двоичных данных, а не строку.

Также: перед ответами, предлагающими использовать StringBuilder для цикла.

...