J'ai une chaîne hexadécimale (par exemple 0CFE9E69271557822FE715A8B3E564BE
) et je veux l'écrire dans un fichier sous forme d'octets. Par exemple,
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
00000000 0C FE 9E 69 27 15 57 82 2F E7 15 A8 B3 E5 64 BE .þži'.W‚/ç.¨³åd¾
Comment puis-je accomplir cela en utilisant .NET et C #?
Réponses:
Si je vous comprends bien, cela devrait faire l'affaire. Vous devrez ajouter
using System.IO
en haut de votre fichier si vous ne l'avez pas déjà.public bool ByteArrayToFile(string fileName, byte[] byteArray) { try { using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { fs.Write(byteArray, 0, byteArray.Length); return true; } } catch (Exception ex) { Console.WriteLine("Exception caught in process: {0}", ex); return false; } }
la source
Le moyen le plus simple serait de convertir votre chaîne hexadécimale en un tableau d'octets et d'utiliser la
File.WriteAllBytes
méthode.En utilisant la
StringToByteArray()
méthode de cette question , vous feriez quelque chose comme ceci:string hexString = "0CFE9E69271557822FE715A8B3E564BE"; File.WriteAllBytes("output.dat", StringToByteArray(hexString));
La
StringToByteArray
méthode est incluse ci-dessous:public static byte[] StringToByteArray(string hex) { return Enumerable.Range(0, hex.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) .ToArray(); }
la source
Essaye ça:
private byte[] Hex2Bin(string hex) { if ((hex == null) || (hex.Length < 1)) { return new byte[0]; } int num = hex.Length / 2; byte[] buffer = new byte[num]; num *= 2; for (int i = 0; i < num; i++) { int num3 = int.Parse(hex.Substring(i, 2), NumberStyles.HexNumber); buffer[i / 2] = (byte) num3; i++; } return buffer; } private string Bin2Hex(byte[] binary) { StringBuilder builder = new StringBuilder(); foreach(byte num in binary) { if (num > 15) { builder.AppendFormat("{0:X}", num); } else { builder.AppendFormat("0{0:X}", num); /////// 大于 15 就多加个 0 } } return builder.ToString(); }
la source
Vous convertissez la chaîne hexadécimale en un tableau d'octets.
public static byte[] StringToByteArray(string hex) { return Enumerable.Range(0, hex.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) .ToArray(); }
Crédits: Jared Par
Et puis utilisez WriteAllBytes pour écrire dans le système de fichiers.
la source
Cet exemple lit 6 octets dans un tableau d'octets et l'écrit dans un autre tableau d'octets. Il effectue une opération XOR avec les octets afin que le résultat écrit dans le fichier soit le même que les valeurs de départ d'origine. Le fichier a toujours une taille de 6 octets, car il écrit à la position 0.
using System; using System.IO; namespace ConsoleApplication1 { class Program { static void Main() { byte[] b1 = { 1, 2, 4, 8, 16, 32 }; byte[] b2 = new byte[6]; byte[] b3 = new byte[6]; byte[] b4 = new byte[6]; FileStream f1; f1 = new FileStream("test.txt", FileMode.Create, FileAccess.Write); // write the byte array into a new file f1.Write(b1, 0, 6); f1.Close(); // read the byte array f1 = new FileStream("test.txt", FileMode.Open, FileAccess.Read); f1.Read(b2, 0, 6); f1.Close(); // make changes to the byte array for (int i = 1; i < b2.Length; i++) { b2[i] = (byte)(b2[i] ^ (byte)10); //xor 10 } f1 = new FileStream("test.txt", FileMode.Open, FileAccess.Write); // write the new byte array into the file f1.Write(b2, 0, 6); f1.Close(); f1 = new FileStream("test.txt", FileMode.Open, FileAccess.Read); // read the byte array f1.Read(b3, 0, 6); f1.Close(); // make changes to the byte array for (int i = 1; i < b3.Length; i++) { b4[i] = (byte)(b3[i] ^ (byte)10); //xor 10 } f1 = new FileStream("test.txt", FileMode.Open, FileAccess.Write); // b4 will have the same values as b1 f1.Write(b4, 0, 6); f1.Close(); } } }
la source