我需要将一个int列表写入长度为 4字节的二进制文件中,因此,我需要确保二进制文件是正确的,并且我执行以下操作:
using (FileStream fileStream = new FileStream(binaryFileName, FileMode.Create)) // destiny file directory.
{
using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
{
for (int i = 0; i < frameCodes.Count; i++)
{
binaryWriter.Write(frameCodes[i]);
binaryWriter.Write(4);
}
binaryWriter.Close();
}
}
在这一行:binaryWriter.Write(4);
我给出了大小,这是正确的吗?
答案 0 :(得分:2)
在这一行“binaryWriter.Write(4);”我给出了大小,这是正确的吗?
不,这不对。行binaryWriter.Write(4);
会将整数4
写入流中(例如00000000 00000000 00000000 00000100
)。
这一行是正确的:binaryWriter.Write(frameCodes[i]);
。它将整数frameCodes[i]
写入流中。由于整数需要4个字节,因此将写入4个字节。
当然,如果您的列表包含X个条目,则生成的文件大小为4 * X.
答案 1 :(得分:1)
AS PER MSDN
这两个可能对你有帮助。我知道它不接近答案,但会帮助你获得概念
using System;
public class Example
{
public static void Main()
{
int value = -16;
Byte[] bytes = BitConverter.GetBytes(value);
// Convert bytes back to Int32.
int intValue = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("{0} = {1}: {2}",
value, intValue,
value.Equals(intValue) ? "Round-trips" : "Does not round-trip");
// Convert bytes to UInt32.
uint uintValue = BitConverter.ToUInt32(bytes, 0);
Console.WriteLine("{0} = {1}: {2}", value, uintValue,
value.Equals(uintValue) ? "Round-trips" : "Does not round-trip");
}
}
byte[] bytes = { 0, 0, 0, 25 };
// If the system architecture is little-endian (that is, little end first),
// reverse the byte array.
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int: {0}", i);