2014-07-26 2 views
0

J'essaie de rechercher une valeur hexadécimale dans un fichier, si cette valeur est présente, j'ai besoin de copier 16 octets de char à partir de cette position trouvée. J'essaie de faire la même chose en C#.Hex Valeur Trouver avec C#

Veuillez trouver ci-dessous mon code essayé, la correction sera grandement appréciée.

BinaryReader bw = new BinaryReader(File.OpenRead(filepath)); 
byte[] bc = { 0xa0, 0x00, 0x00, 0x03 }; 
for (int i = 0; i < br.BaseStream.Length-10;i++) 
{ 

if (bw.ReadUInt32() == 0xa00003) 
{ 
    Console.WriteLine("Found @ {0}", i); 

} 

bw.Close(); 

I "m obtenir une erreur comme suit:

Une exception non gérée du type 'System.IO.EndOfStreamException' est produite dans mscorlib.dll

Informations complémentaires: Impossible de lire au-delà de la fin du flux

+1

Que voulez-vous dire par "16 octets de caractère"? Les caractères et les octets sont très différents, et vous devez savoir * exactement * ce que vous voulez. Je soupçonne que votre erreur est parce que vous lisez 4 octets à la fois, mais en lisant (length-in-byte - 10) fois. –

+0

Chaîne qui contient 16 caractères – jOSe

+0

Ah, bien que cela pourrait être plus de 16 octets ... et vous devez savoir quel encodage est utilisé. Sais-tu cela? –

Répondre

0

L'erreur est due au fait que votre boucle for a étape égale à 1 et vous lisez 4 octets à la fois. Après la lecture, la position Stream est avancée par 4. Changez votre boucle for à la suivante:

for (int i = 0; i < br.BaseStream.Length - 10; i += 4) 
{ 
    //... 
} 

EDIT:

Si vous souhaitez rechercher à chaque position sans sauter 4 octets chaque fois, utilisez la code suivant:

Stream f = File.OpenRead(fileName); 
    BinaryReader br = new BinaryReader(f); 
    for (int i = 0; i < f.Length - 10; i++) 
    { 
     f.Seek(i, SeekOrigin.Begin); 
     if (br.ReadUInt32() == 0xa00003) 
     { 
      Console.WriteLine("Found @ {0}", i); 
     } 
    } 
    br.Close(); 
+0

Dans la version modifiée, je reçois toujours la même erreur. – jOSe

+0

À quelle étape obtenez-vous l'erreur? Quelle est la "version éditée"? Vous pouvez ajouter votre nouvelle version à la publication initiale. –

+0

Laissez-moi redéfinir ma question. Étape 1. Je suis à la recherche d'une valeur hexadécimale de signature qui est 0x030000A0. J'ai besoin de le chercher dans un fichier. Étape 2. Si je trouve que j'ai besoin de chercher à cette position et extraire la valeur de chaîne de 16 octets à la console. – jOSe