0

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

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

谢谢。

4

1 回答 1

0

BinaryWriter 只是将相应的字节写入文件。空终止符只是一个等于全零的字节,或'\0'。如果您不能有一个全为零的字节,则需要对零进行编码。一个简单的方法是将所有0x00s转换为 s0xFF01和任何实际0xFF的 to 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);
        }
     }
  }
于 2013-07-12T22:31:46.190 回答