如何将uint16的列表转换为字节数组,并在不添加零终止符的情况下写入二进制文件

本文关键字:添加 终止 情况下 二进制文件 列表 uint16 转换 数组 字节数 字节 | 更新日期: 2023-09-27 18:22:14

我有一个uint16列表,我正试图将其写入一个二进制文件。我在列表的开头确实有一个0,它正在为其添加一个null终止符。如何将我的列表转换为能够正确写入二进制文件?

  List<UInt16> xyz = new List<UInt16>();
  Byte[] byteArray = null;
  byteArray = xyz.SelectMany(i => BitConverter.GetBytes(i)).ToArray();
  Using(BinaryWriter Writer = new BinaryWriter(File.Create(path))
  {
  Writer.Write(byteArray);
  }

谢谢。

如何将uint16的列表转换为字节数组,并在不添加零终止符的情况下写入二进制文件

BinaryWriter只是将相应的字节写入文件。空终止符只是一个等于全零的字节,或者''0'。如果不能有一个全为零的字节,则需要对零进行编码。一个简单的方法是将所有0x00转换为0xFF01,并将任何实际的0xFF转换为0xFFFF。在读取文件时,您必须记住这一点并正确解码。

  List<UInt16> xyz = new List<UInt16>();
  Byte[] byteArray = null;
  byteArray = xyz.SelectMany(i => BitConverter.GetBytes(i)).ToArray();
  using (BinaryWriter Writer = new BinaryWriter(File.Create("path")))
  {
     foreach (Byte b in byteArray)
     {
        if (b == 0)
        {
           Writer.Write(Byte.MaxValue);
           Writer.Write((Byte) 1);
        }
        else if (b == Byte.MaxValue)
        {
           Writer.Write(Byte.MaxValue);
           Writer.Write(Byte.MaxValue);
        }
        else
        {
           Writer.Write(b);
        }
     }
  }