我在读一件设备生成的二进制日志文件。我转换为短期有效的二进制数据?
我有一个字节[]的数据。
如果我需要阅读两个字节来创建一个短,我可以做这样的事情:
short value = (short)(byte[1] << 8);
value += byte[2];
现在我知道的值是正确的有效数据。
我该如何知道文件是否搞砸了,可以说FF FF的值是在字节数组中的那两个地方?
当我查看FF FF转换为短的结果值时,我得到-1。
这是FF FF的正常值吗?还是计算机刚刚遇到了一些短的边界并且无效的数据滚动?
对我而言,所有这些数字都是正面的。如果FF FF实际上是一个短-1,那么我只需要验证我的所有结果都是明示的。
谢谢
基思
顺便说一句,我也读其他数字数据类型。我会在这里展示他们,只是因为。 Read函数是读取字节[]的基本部分。所有其他数据类型读取都使用基本的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;
}
干净的东西在二补的。 http://en.wikipedia.org/wiki/Twos_complement – 2008-11-06 16:16:18