2010-06-02 7 views
2

J'essaie de créer un fichier binaire à partir d'un fichier intelHex. Iside le fichier intelHex J'ai des données et l'adresse à laquelle je devrais écrire les données dans le fichier binaire. fichier IntelHex ressemble queCréation d'un fichier binaire à partir d'un IntelHex en C#

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

J'ai donc 4 lignes ici avec des données depuis le dernier nous dit thats la fin du fichier. Voici ce que je fais pour créer le fichier

 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..."); 

Le problème ici est que les données dans le fichier binaire dans certains endroits ne correspond pas aux données du fichier IntelHex. On dirait qu'il y a quelques données aléatoires ajoutées au fichier et je ne sais pas d'où. La première fois que j'ai vu qu'il y a une donnée supplémentaire avant les données du fichier intelHex. Par exemple, la première ligne de données commence par 21, mais dans le fichier binaire, j'ai un numéro 12 avant le 21. Je ne sais pas ce qui ne va pas ici. Espérons que quelqu'un peut m'aider ou me guider où je peux trouver quelques informations utiles sur la création de fichiers binaires en C#

+0

Quelles sont les données aléatoires que vous voyez? (une sérigraphie peut-être) – KevinDTimm

Répondre

2

< Réponse générique soulignant qu'un caractère Unicode (char) n'est pas un octet (octet), et que le code produit la mauvaise sortie car les données binaires sont écrites en tant que chaîne Unicode dans le fichier. Indice: utilisez un octet [] pour les données binaires, pas une chaîne.

Aussi: Dans avant les réponses suggérant d'utiliser un StringBuilder pour la boucle.

+0

Merci, maintenant ça marche comme il se doit. – Allek