将字节值移入 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
传入,则不需要该步骤。
我试图将单个字节值存储到 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
传入,则不需要该步骤。