I'm trying to use binaryreader to 'pull apart' and index a binary file but I need some help.
I got this so far:
using (BinaryReader b = new BinaryReader(File.Open(openRaw.FileName, FileMode.Open)))
{
int pos = 0;
// 2A.
// Use BaseStream.
int length = (int)b.BaseStream.Length;
while (pos < length)
{
//Move on
pos += sizeof(int);
}
}
But now the hard part starts, atleast for me.
The file contains byte arrays consisting of 169 bytes seperated by a ! (0x21) character.
For each byte array I need to split it into multiple values consisting of 16 and 8 bits.
I know the index exactly and it is always the same. E.g.: Index 0+1 contains a U16 decimal value being speed, index 16+17 contains a S16 decimal value being pressure. And so on through each array of 169 bytes.
How should I handle this?
EDIT:
I no have this:
FileInfo f = new FileInfo(openRaw.FileName);
double s1 = Convert.ToDouble(f.Length);
double s2 = s1 / 170;
double s3 = Math.Floor(s2);
double s4 = s3 * 170;
using (BinaryReader b = new BinaryReader(File.Open(openRaw.FileName, FileMode.Open), Encoding.ASCII))
{
int pos = 0;
// 2A.
// Use BaseStream.
while (pos < s4)
{
while (b.PeekChar() != -1)
{
if (b.ReadByte() != 0x21)
{
flag = 1;
}
temp = b.ReadBytes(2);
Array.Reverse(temp);
seconds = BitConverter.ToUInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
PW1 = BitConverter.ToUInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
PW2 = BitConverter.ToUInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
RPM = BitConverter.ToUInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
advance = BitConverter.ToInt16(temp, 0);
NN = b.ReadBytes(6);
temp = b.ReadBytes(2);
Array.Reverse(temp);
Baro = BitConverter.ToInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
map = BitConverter.ToInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
mat = BitConverter.ToInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
clt = BitConverter.ToInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
tps = BitConverter.ToInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
bat = BitConverter.ToInt16(temp, 0);
temp = b.ReadBytes(2);
Array.Reverse(temp);
AFR = BitConverter.ToInt16(temp, 0);
stemp16 = b.ReadInt16();
temp = b.ReadBytes(2);
Array.Reverse(temp);
knock = BitConverter.ToInt16(temp, 0); ; //33
NN = b.ReadBytes(135);
table1.Rows.Add((seconds * 0.00390625), RPM, map, (tps * 0.1), ((mat - 320) * 0.05555), ((clt - 320) * 0.05555), (PW1 * 0.000666), (PW2 * 0.000666), (advance * 0.1), (knock * 0.1), (RPM/100), (Baro * 0.1), (AFR * 0.1), (bat * 0.1));
}
//Move on
pos = pos+= sizeof(int);
}
dataGridView1.DataSource = table1;
}