Write bytes to file

前端 未结 5 1001
迷失自我
迷失自我 2020-12-01 00:18

I have a hexadecimal string (e.g 0CFE9E69271557822FE715A8B3E564BE) and I want to write it to a file as bytes. For example,

Offset      0  1  2           


        
相关标签:
5条回答
  • 2020-12-01 00:58

    This example reads 6 bytes into a byte array and writes it to another byte array. It does an XOR operation with the bytes so that the result written to the file is the same as the original starting values. The file is always 6 bytes in size, since it writes at 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();
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-01 01:03

    If I understand you correctly, this should do the trick. You'll need add using System.IO at the top of your file if you don't already have it.

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-01 01:10

    Try this:

    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();
    }
    
    0 讨论(0)
  • 2020-12-01 01:19

    The simplest way would be to convert your hexadecimal string to a byte array and use the File.WriteAllBytes method.

    Using the StringToByteArray() method from this question, you'd do something like this:

    string hexString = "0CFE9E69271557822FE715A8B3E564BE";
    
    File.WriteAllBytes("output.dat", StringToByteArray(hexString));
    

    The StringToByteArray method is included below:

    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();
    }
    
    0 讨论(0)
  • 2020-12-01 01:25

    You convert the hex string to a byte array.

    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();
    }
    

    Credit: Jared Par

    And then use WriteAllBytes to write to the file system.

    0 讨论(0)
提交回复
热议问题