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

时间:2013-07-12 22:14:49

标签: c# bytearray

我有一个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);
  }

感谢。

1 个答案:

答案 0 :(得分:0)

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