2017-07-17 3 views
1

donc je crée un programme qui lit un tableau d'octets et renvoie la valeurComment retourner un octet d'un tableau d'octets avec la valeur hexadécimale complète?

byte[] buffer1 = File.ReadAllBytes(path).Skip(startPos).Take(lengthToExtract).ToArray(); 
byte[] reversed = buffer1.Reverse().ToArray(); 
string buffer2 = ""; 
foreach (var i in reversed) 
{ 
    buffer2 = buffer2 + i.ToString("X") + " "; 
} 
MessageBox.Show(buffer2); 
int size = int.Parse(buffer2.Replace(" ", string.Empty), System.Globalization.NumberStyles.HexNumber); 
return size; 

Mais quand je reçois le message pour la valeur de la mémoire tampon de chaîne hexadécimale des valeurs qu'il faut sur l'hexagone « sans importance » numéro dehors qui bousille ma valeur. Par exemple, si l'octet lu est 0x00, il renverra la valeur à 0, et je lirai les octets résultants à l'envers donc: 0x04080 (0 4 0 80) est différent de 0x0040080 (00 04 00 80). J'ai besoin d'aide, ça gâchera tout mon programme.

Répondre

1

Voici 2 fonctions que vous pouvez utiliser. Ils vont résoudre les deux problèmes - deux chiffres et d'octets pour

public static string HexStringFromArrayChangeEndian(byte[] data) 
    { 
     StringBuilder sdata = new StringBuilder(); 
     for (int s = data.Length - 1; s >= 0; s--) 
      sdata.Append(string.Format("{0:X}", data[s]).PadLeft(2, '0')); 
     return sdata.ToString(); 
    } 

    public static string HexStringFromArraySameEndian(byte[] data) 
    { 
     StringBuilder sdata = new StringBuilder(); 
     for (int s = 0; s < data.Length; s++) 
      sdata.Append(string.Format("{0:X}", data[s]).PadLeft(2, '0')); 
     return sdata.ToString(); 
    } 
+0

Vos lignes avec des appels à 'PadLeft' pourrait être simplifié à' sdata.Append (données [s] .ToString (« X2 »)); ' ce qui empêchera la création d'un tas de chaînes supplémentaires. +1 cependant pour utiliser un StringBuilder pour empêcher le garbage collector de se mettre en colère contre vous. Pourrait aller un peu plus loin et en faire 'StringBuilder sdata = new StringBuilder (data.Length * 2);' –

+0

@LeeHiles Sure. Ce seront des améliorations –

1

Utilisez i.ToString("X2"). Force la sortie de chaîne de "00" au lieu de "0" simplifié