如何将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);
}
谢谢。
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);
}
}
}