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

时间:2014-06-23 03:19:29

标签: c# .net 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
  • 前3个值是STRINGS,应转换为ASCII HEX值,然后写入.bin文件

  • 接下来的7个值是HEX,应该在.bin文件中写成AS-IS

  • 最后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
    

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

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

1 个答案:

答案 0 :(得分:4)

使用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);
        }
    }
}

<强>结果: Hex editor output