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