I am trying to read a file using BinaryReader. However, I am having trouble in retrieving the value that is expected. 
using (BinaryReader b = new BinaryReader(File.Open("file.dat", FileMode.Open)))
{
    int result = b.ReadInt32(); //expected to be 2051
}
"file.dat" is the following ...
00 00 08 03 00 00 EA 60
The expected result should be 2051, but it gets something totally irrelevant instead. Note that the result I get everytime is the same.
What is the problem?
BinaryReader.ReadInt32 expects the data to be in Little Endian format. Your data you presented is in Big Endian.
Here's a sample program that shows the output of how BinaryWriter writes an Int32 to memory:
namespace Endian {
  using System;
  using System.IO;
  static class Program {
    static void Main() {
      int a = 2051;
      using (MemoryStream stream = new MemoryStream()) {
        using (BinaryWriter writer = new BinaryWriter(stream)) {
          writer.Write(a);
        }
        foreach (byte b in stream.ToArray()) {
          Console.Write("{0:X2} ", b);
        }
      }
      Console.WriteLine();
    }
  }
}
Running this produces the output:
03 08 00 00
To convert between the two, you could read four bytes using BinaryReader.ReadBytes(4), reverse the array, and then use BitConverter.ToInt32 to convert it to a usable int.
byte[] data = reader.ReadBytes(4);
Array.Reverse(data);
int result = BitConverter.ToInt32(data);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With