我需要弄清楚,如何设置十六进制数 0xffff,它在下面的代码中动态地用于按位与。
int offsetData = address & 0xffff;
例如我需要这样的东西:
int offsetData = address & myHexaValue;
我有一个十进制 int 值,我需要用十六进制格式代替 myHexaValue。
这是我现在的状态。
int decimalShift = 16*8;
String myHexaValueString = Integer.toHexString(decimalShift);
现在..我可以将我的 String 六进制数转换为 int 六进制数,以便我可以将结果放入 myHexaValue 吗?
最佳答案
您不需要转换它。没有十六进制数这样的东西。以十六进制书写的数字是以 16 进制表示法书写的数字。我们通常使用 base 10 表示法,所以我们有从 0 到 9 的数字,但在十六进制表示法中,你有从 0 到 F 的数字。 所以只做一个和操作:
int offsetData = address & decimalShift;
编辑: 要仅获取低 16 位,请使用掩码。 0xffff 并执行 & 操作,高 16 位将设置为 0,低 16 位保持不变。 所以:
int offsetData = address & decimalShift & 0xffff;
编辑2: 要获得任意数字 (0,...,31) 的掩码,您可以使用此函数:
private static int getMask(int numOfOnes) {
int i = 0x80000000;
i = i>>(32-numOfOnes-1);
i = ~i;
return i;
}
Pauls 解释:“用 >> 进行位移,在移位之前用 MSB 的值填充最高有效位,因此在这段代码中,除了 numOfOnes 最低位之外的所有位都用 1 填充,然后数字被反转。”
关于java - 将Java String十六进制数转换为int十六进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843230/