我有一个名为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()来说也是正确的。
为什么会有所不同?什么地方出了错?我该如何解决?
答案 0 :(得分:2)
请记住,字节是用Java签名的(想想如果getByteValue(fileOffset)
返回-100
会发生什么)。
我建议您使用ByteBuffer
及其getInt
,getShort
方法。
您的方法可以通过更改
来解决public byte getByteValue(int fileOffset)
{
return contents[fileOffset];
}
到
public int getByteValue(int fileOffset)
{
return contents[fileOffset] & 0xFF;
}