如何将List <int>写入二进制文件(4个字节长)?</int>

时间:2011-04-15 14:10:56

标签: c# binaryfiles binarywriter

我需要将一个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);我给出了大小,这是正确的吗?

2 个答案:

答案 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);
相关问题