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;
}