我有一个名为 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 的整数值时,例如 HxD ,但是 Java 方法返回 0x4454FF00。
奇怪的是,getShortValue()
对于 0x4455 和 getByteValue() 显然也是正确的。
为什么会有所不同?什么地方出了错?我该如何修复它?
最佳答案
请记住,Java 中的字节是有符号的(想想如果 getByteValue(fileOffset)
返回 -100
会发生什么)。
我建议您使用ByteBuffer
及其getInt
、getShort
方法。
您的方法可以通过更改来修复
public byte getByteValue(int fileOffset)
{
return contents[fileOffset];
}
至
public int getByteValue(int fileOffset)
{
return contents[fileOffset] & 0xFF;
}
关于java - 将 4 个字节组合为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29180032/