我有一个名为contents的字节数组,我想从中读取字节,短裤和整数。

为此,我分别读取字节并通过移位将它们组合在一起。

public byte getByteValue(int fileOffset)
{
    return contents[fileOffset];
}

public short getShortValue(int fileOffset)
{
    short shortValue;

    shortValue = getByteValue(fileOffset);
    shortValue = (short) (shortValue * 256 + getByteValue(fileOffset + 1));

    return shortValue;
}

public int getIntegerValue(int fileOffset)
{
    int integerValue;

    integerValue = getShortValue(fileOffset);
    integerValue = integerValue * 256 + getByteValue(fileOffset + 2);
    integerValue = integerValue * 256 + getByteValue(fileOffset + 3);

    return integerValue;
}


当在整数值(如HxD之类的十六进制编辑器中)显示为0x4455FF00时,Java方法将返回0x4454FF00。

奇怪的是,getShortValue()正确地也适用于0x4455和getByteValue()。

为什么不同?什么地方出了错?我如何解决它?

最佳答案

请记住,字节是用Java签名的(想想如果getByteValue(fileOffset)返回-100会发生什么)。

我建议您使用ByteBuffer及其getIntgetShort方法。

您的方法可以通过更改来解决

public byte getByteValue(int fileOffset)
{
    return contents[fileOffset];
}




public int getByteValue(int fileOffset)
{
    return contents[fileOffset] & 0xFF;
}

10-06 03:26