機器によって生成されたバイナリ ログ ファイルを読み込んでいます。
byte[] にデータがあります。
short を作成するために 2 バイトを読み取る必要がある場合は、次のようなことができます。
short value = (short)(byte[1] << 8);
value += byte[2];
これで、値が有効なデータに対して正しいことがわかりました。
ファイルがめちゃくちゃで、値 FF FF がバイト配列のこれらの 2 つの場所にあったとしたら、どうすればわかりますか?
FF FF をショートに変換した結果の値を見ると、-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;
}