我有一个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);
}
感谢。
答案 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);
}
}
}