У меня есть шестнадцатеричная строка (например 0CFE9E69271557822FE715A8B3E564BE
), и я хочу записать ее в файл в виде байтов. Например,
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¾
Как я могу добиться этого с помощью .NET и C #?
Ответы:
Если я правильно вас понял, это должно помочь. Вам нужно будет добавить
using System.IO
в начало файла, если у вас его еще нет.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; } }
источник
Самый простой способ - преобразовать вашу шестнадцатеричную строку в массив байтов и использовать этот
File.WriteAllBytes
метод.Используя
StringToByteArray()
метод из этого вопроса , вы бы сделали что-то вроде этого:string hexString = "0CFE9E69271557822FE715A8B3E564BE"; File.WriteAllBytes("output.dat", StringToByteArray(hexString));
StringToByteArray
Метод приведен ниже: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(); }
источник
Попробуй это:
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(); }
источник
Вы конвертируете шестнадцатеричную строку в байтовый массив.
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(); }
Предоставлено: Джаред Пар.
А затем используйте WriteAllBytes для записи в файловую систему.
источник
В этом примере 6 байтов считываются в байтовый массив и записываются в другой байтовый массив. Он выполняет операцию XOR с байтами, чтобы результат, записанный в файл, был таким же, как исходные начальные значения. Размер файла всегда 6 байт, поскольку он записывается в позиции 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(); } } }
источник