java - 将 4 个字节组合为整数

标签 java

我有一个名为 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及其getIntgetShort方法。

您的方法可以通过更改来修复

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/

相关文章:

java - 将 JBOSS 中的 war 中的模块中存在的 ejb3 调用为 7.1

java推荐的关闭多个用户 session 的方法

java - 为什么 Java 中的后缀运算符从右到左求值?

java - 在没有代码的情况下持续获取 NullPointerException

java - JScrollPane 没有滚动超过设定的大小

java - 创建数组的区别

java - picasso 自定义下载器问题

java - 经过几次相同的 hql 查询后,应用程序卡住

java - 自动化现有的 Web 应用程序和电子邮件生成的报告

java - Mule - 使用 Maven 运行时项目构建失败