1

我正在尝试将单个字节值存储到 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);
    }
4

1 回答 1

2

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

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

这与如何在 C# 中做同样的事情非常相似,但 Java 需要& 0xFF防止byte. 如果“字节”是 0 到 255 之间的值并作为 传入,int则不需要该步骤。

于 2020-11-28T19:23:25.003 回答