2

intelHexファイルからバイナリファイルを作成しようとしています。intelHexファイルのほかに、バイナリファイル内にデータを書き込む必要のあるデータとアドレスがあります。IntelHexファイルはそのように見えます

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

最後の1行でファイルの終わりが示されているので、ここに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#でのバイナリファイルの作成に関するいくつかの有用な情報を見つけることができる場所を案内してくれることを願っています

4

1 に答える 1

2

<Unicode文字(char)はオクテット(byte)ではなく、バイナリデータがUnicode文字列としてファイルに書き込まれるため、コードが誤った出力を生成することを指摘する一般的な回答。>

ヒント:文字列ではなく、バイナリデータにbyte[]を使用してください。

また:前の回答では、ループにStringBuilderを使用することを提案しています。

于 2010-06-02T19:45:49.987 に答える