我正在使用下面的代码在C#中创建二进制文件。这是相对简单的代码。 RawData变量是一个类型字符串[]。
using (BinaryWriter bin = new BinaryWriter(File.Open("file.bin", FileMode.Create)))
{
foreach (string data in RawData)
{
int Byte = Convert.ToInt32(data, 16);
bin.Write(Byte);
}
}
不幸的是,BIN文件是这样生成的。它放置正确的字节值,但随后跳过接下来的三个字节并在那里放置零,然后放置下一个字节值。有谁知道为什么会这样。我使用了debugged和bin.Write(Byte),并且这些额外的零都没有发送到这个方法。
答案 0 :(得分:3)
您正在使用BinaryWriter.Write(int)
。所以是的,它正在写4个字节,如记录所示。
如果您只想写一个字节,则应使用BinaryWriter.Write(byte)
代替。
所以你可能只想要:
bin.Write(Convert.ToByte(data, 16));
或者,将整个工作分为两行:
byte[] bytes = RawData.Select(x => Convert.ToByte(x, 16)).ToArray();
File.WriteAllBytes("file.bin", bytes);
答案 1 :(得分:2)
尝试
var Byte = Convert.ToByte(....)
代替。
您正在转换为int,每个都是4个字节。所以,你看到其中三个都是零,而int的一个字节就是你期望的值。