Java 将4字节合并为整数

Java 将4字节合并为整数,java,Java,我有一个名为contents的字节数组,我想从中读取字节、短字符和整数 为此,我单独读取字节,并通过移位将它们组合起来 public byte getByteValue(int fileOffset) { return contents[fileOffset]; } public short getShortValue(int fileOffset) { short shortValue; shortValue = getByteValue(fileOffset);

我有一个名为
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;
}
当这用于在十六进制编辑器(如)中显示为0x4455FF00的整数值时,Java方法返回0x4454FF00

奇怪的是,
getShortValue()
显然与0x4455和getByteValue()一样正确


为什么不同?出了什么问题?如何修复它?

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

我建议您使用
ByteBuffer
及其
getInt
getShort
方法

您的方法可以通过更改

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


完美的我选择了
wrapp
ByteBuffer数组,并使用它的函数而不是我自己的移位。你为什么要重新实现
DataInputStream
和/或
RandomAccessFile?
EJP:我刚刚忘记了它们的存在,但也感谢你指出了它们,如果你使用的是番石榴,那就没有了
public int getByteValue(int fileOffset)
{
    return contents[fileOffset] & 0xFF;
}