我正在读取由一台设备生成的二进制日志文件。
我有一个字节[]中的数据。
如果我需要读取两个字节来创建一个短的,我可以这样做:
short value = (short)(byte[1] << 8);
value += byte[2];
现在我知道该值对于有效数据是正确的。
我怎么知道文件是否被弄乱了,让我们说值 FF FF 在字节数组的这两个地方?
当我查看将 FF FF 转换为 short 的结果值时,我得到 -1。
这是 FF FF 的正常值吗?还是计算机刚刚遇到某种短路并使用无效数据翻转?
出于我的目的,所有这些数字都将是积极的。如果 FF FF 实际上是一个短的 -1,那么我只需要验证我的所有结果都是正数。
谢谢你,
基思
顺便说一句,我也在阅读其他数字数据类型。我会在这里展示它们只是因为。Read 函数是从 byte[] 读取的基本部分。所有其他数据类型的读取都使用基本的 Read() 函数。
public byte Read()
{
//advance position and then return byte at position
byte returnValue;
if (_CurrentPosition < _count - 1)
{
returnValue= _array[_offset + ++_CurrentPosition];
return returnValue;
}
else
throw new System.IO.EndOfStreamException
("Cannot Read Array, at end of stream.");
}
public float ReadFloat()
{
byte[] floatTemp = new byte[4];
for (int i = 3; i >= 0; i--)
{
floatTemp[i] = Read();
}
float returnValue = System.BitConverter.ToSingle
(floatTemp, 0);
if (float.IsNaN(returnValue))
{
throw new Execption("Not a Number");
}
return returnValue;
}
public short ReadInt16()
{
short returnValue = (short)(Read() << 8);
returnValue += Read();
return returnValue;
}
public int ReadInt32()
{
int returnValue = Read() << 24;
returnValue += Read() << 16;
returnValue += Read() << 8;
returnValue += Read();
return returnValue;
}