将4个字节组合为整数

时间:2015-03-21 06:44:23

标签: java

我有一个名为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方法会返回0x445 4 FF00。

奇怪的是,getShortValue()对于0x4455和getByteValue()来说也是正确的。

为什么会有所不同?什么地方出了错?我该如何解决?

1 个答案:

答案 0 :(得分:2)

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

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

您的方法可以通过更改

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

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