在C#中使用IntelHex创建二进制文件

时间:2010-06-02 19:30:53

标签: c# binaryfiles binary-data

我正在尝试从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开头,但在二进制文件中,我在21之前有一个数字12.我不知道这里有什么问题。希望有人可以帮助我或指导我在哪里可以找到有关在C#中创建二进制文件的有用信息

1 个答案:

答案 0 :(得分:2)

&lt;通用答案指出Unicode字符(char)不是八位字节(字节),并且代码产生错误的输出,因为二进制数据作为Unicode字符串写入文件。&gt;

提示:对二进制数据使用byte [],而不是字符串。

另外:在答案之前建议使用StringBuilder进行循环。