gpt4 book ai didi

c# - 我转换为 Short 的二进制数据有效吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:18 25 4
gpt4 key购买 nike

我正在读取一台设备产生的二进制日志文件。

我有字节[]中的数据。

如果我需要读取两个字节来创建一个短片,我可以这样做:

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;
}

最佳答案

0xffff(所有位都等于 1)对于带符号的短裤是 -1,是的。继续阅读 Two's complement了解更多详情。您可以切换到更大的数据类型,或者(如 Grzenio 所建议的那样)只使用无符号类型。

关于c# - 我转换为 Short 的二进制数据有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/269124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com