Как записать список <int>в двоичный файл (длиной 4 байта)? - PullRequest
2 голосов
/ 15 апреля 2011

Мне нужно записать список целых чисел в двоичный файл длиной 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 ]

2 голосов
/ 15 апреля 2011

в этой строке "binaryWriter.Write (4);" Я даю размер, это правильно ??

Нет, это не правильно. Строка binaryWriter.Write(4); запишет целое число 4 в поток (например, что-то вроде 00000000 00000000 00000000 00000100).

Эта строка верна: binaryWriter.Write(frameCodes[i]);. Он записывает целое число frameCodes[i] в поток. Поскольку целое число требует 4 байта, будет записано ровно 4 байта.

Конечно, если ваш список содержит X записей, то полученный файл будет иметь размер 4 * X.

1 голос
/ 15 апреля 2011

КАК НА 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);
...