我有一个名为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
及其getInt
,getShort
方法。
您的方法可以通过更改来解决
public byte getByteValue(int fileOffset)
{
return contents[fileOffset];
}
至
public int getByteValue(int fileOffset)
{
return contents[fileOffset] & 0xFF;
}