将字节值移入 int

Shift byte value into int

我试图将单个字节值存储到 int 中的某个位置,但是,我无法弄清楚如何完成此操作。 我已经将我想存储在 int 中的字节转移到正确的值,但我不知道如何将它与值结合起来。

public static int ibyteToInt(int b, int pos, int val)
    {
        return ((b & 0xff) << (8 * pos)) ??;
    }

最简单的解决方案是从 int 中解压缩其他 3 个字节,然后将这 4 个字节重新组合成一个 int,但这当然不会非常高效。

public static int bytesToInt(byte a, byte b, byte c, byte d)
    {
        return ((a & 0xff) << 0) | ((b & 0xff) << 8) | ((c & 0xff) << 16) | ((d & 0xff) << 24);
    }

另一个简单的解决方案是清除目标字节,然后在新值中进行 OR 运算:

int replaceByte(int value, byte b, int pos)
{
    return (value & ~(0xFF << (pos * 8))) | ((b & 0xFF) << (pos * 8));
}

这与 how to do the same thing in C# 非常相似,但是 Java 需要 & 0xFF 来防止 byte 的符号扩展。如果“字节”是 0 到 255 之间的值并作为 int 传入,则不需要该步骤。