C #: escriba valores en formato de archivo binario (.bin)

Así que digamos que tengo los siguientes valores:

HEADER01 48 45 41 44 45 52 30 31 06/17/14 30 36 2F 31 37 2F 31 34 1.0 31 2E 30 0x0000 00 0x0027 27 0x0001 01 0x0001 01 0x0001 01 0x0001 01 0x0028 28 192 C0 168 A8 1 01 1 01 
  • Los primeros 3 valores son STRINGS, se deben convertir a valores ASCII HEX y luego se escriben en el archivo .bin

  • Los siguientes 7 valores son HEX, deben escribirse AS-IS en el archivo .bin

  • Los últimos 4 valores son INTEGERS, se deben convertir a HEX y luego se escriben en el archivo .bin

    El archivo de SALIDA (.bin) debe verse algo como esto:

     00000000 48 45 41 44 45 52 30 31 30 36 2F 31 37 2F 31 34 00000010 31 2E 30 00 27 01 01 01 01 28 C0 A8 01 01 00 00 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

¿Es posible crear un archivo (.bin) como este usando C # .NET?

Intenté BinaryWriter, StreamWriter, pero por alguna razón, todos los valores se escriben como cadenas HEX y no como los quiero.

Usar BinaryWriter es la solución correcta.

No caiga en la tentación de usar la BinaryWriter.Write(String) la cadena con una longitud de un solo byte, que no es lo que usted desea.

También tenga en cuenta que he emitido explícitamente cada valor a (byte) . Si no hubiera hecho esto, el comstackdor habría seleccionado la sobrecarga de escritura Write(int) , escribiendo 4 bytes en el archivo.

 class Program { static void Main(string[] args) { using (var s = File.OpenWrite("temp.bin")) { var bw = new BinaryWriter(s); bw.Write(Encoding.ASCII.GetBytes("HEADER01")); bw.Write(Encoding.ASCII.GetBytes("06/17/14")); bw.Write(Encoding.ASCII.GetBytes("1.0")); bw.Write((byte)0x00); bw.Write((byte)0x27); bw.Write((byte)0x01); bw.Write((byte)0x01); bw.Write((byte)0x01); bw.Write((byte)0x01); bw.Write((byte)0x28); bw.Write((byte)192); bw.Write((byte)168); bw.Write((byte)1); bw.Write((byte)1); } } } 

Resultado: Salida del editor hexadecimal