장비에서 생성 된 바이너리 로그 파일을 읽는 중입니다.Short로 변환 한 이진 데이터가 유효합니까?
바이트 [] 안에 데이터가 있습니다.
나는 이런 식으로 뭔가를 할 수 짧은 만들기 위해 2 바이트를 읽을 필요가있는 경우 :
short value = (short)(byte[1] << 8);
value += byte[2];
가 지금은 값이 유효한 데이터에 대한 정확한 알고 있습니다.
파일이 망가 졌는지 알 수 있으며 FF FF 값이 바이트 배열의 두 위치에 있다고 말할 수 있습니까?
FF FF를 short로 변환 한 결과 값을 보면 -1이됩니다.
이것은 FF FF의 일반적인 값입니까? 아니면 컴퓨터가 어떤 종류의 짧은 경계를 벗어나 잘못된 데이터로 넘어 갔습니까?
내 목적을 위해 모든 논문 번호는 긍정적 인 것입니다. FF FF가 실제로 짧은 -1이면, 모든 결과가 우월하다는 것을 검증 할 필요가 있습니다.
은 BTW, 내가 다른 숫자 데이터 형식을 읽고있다키스
, 감사합니다. 나는 그들을 여기에 보여줄 것입니다. 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;
}
2의 보수에 대한 멋진 정보. http://en.wikipedia.org/wiki/Twos_complement –