C#:将值写入二进制 (.bin) 文件格式

Eri*_*man 1 .net c# binary hex binaryfiles

所以可以说我有以下值:

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
Run Code Online (Sandbox Code Playgroud)
  • 前 3 个值是 STRINGS,应转换为 ASCII HEX 值,然后写入 .bin 文件

  • 接下来的 7 个值是 HEX,应按原样写入 .bin 文件

  • 最后4个值是INTEGERS,应该转换成HEX,然后写入.bin文件

    OUTPUT (.bin) 文件应如下所示:

    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
    
    Run Code Online (Sandbox Code Playgroud)

是否可以使用 C# .NET 创建这样的 (.bin) 文件?

我试过 BinaryWriter, StreamWriter 但由于某种原因,所有的值都写成 HEX 字符串,而不是我想要的。

Jon*_*art 5

使用BinaryWriter是正确的解决方案。

不要陷入使用BinaryWriter.Write(String)重载的诱惑- 它以单字节长度作为字符串的前缀,这不是您想要的。

另请注意,我已明确将每个值转换为(byte). 如果我没有这样做,编译器就会选择Write(int)重载,将 4 个字节写入文件。

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果: 十六进制编辑器输出