2

我需要将整数列表写入长度为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);我给出尺寸,对吗?

4

2 回答 2

2

在这一行“binaryWriter.Write(4);” 我给个尺寸,对吗??

不,这是不正确的。该行binaryWriter.Write(4);会将整数4写入流中(例如,类似00000000 00000000 00000000 00000100)。

这行是正确的:binaryWriter.Write(frameCodes[i]);. 它将整数frameCodes[i]写入流中。由于整数需要 4 个字节,因此将写入 4 个字节。

当然,如果您的列表包含 X 个条目,则生成的文件大小为 4*X。

于 2011-04-15T14:15:20.230 回答
1

根据 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);
于 2011-04-15T14:17:38.103 回答