我需要弄清楚,如何设置十六进制数字0xffff,它在下面的代码中动态用于按位 AND。
int offsetData = address & 0xffff;
例如,我需要这样的东西:
int offsetData = address & myHexaValue;
我有一个十进制整数值,我需要以十六进制格式而不是 myHexaValue 输入。
这就是我现在的状态。
int decimalShift = 16*8;
String myHexaValueString = Integer.toHexString(decimalShift);
现在.. 我可以将我的字符串十六进制数转换为整数十六进制数,以便我可以将结果放入 myHexaValue 中吗?
你不需要转换它。没有十六进制数这样的东西。用十六进制书写的数字是以 16 为底的表示法书写的数字。我们通常使用以 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 填充,然后数字反转。
使用 Integer.parseInt()
,指定基数 16
:
int number = Integer.parseInt(myHexaNumber, 16);
不是"十六进制"或"十进制"。这只是由于懒惰而使用的不精确的拼写。数字表示为十进制或十六进制将是精确的。无需将int
从十进制转换为十六进制。事实上,它们以二进制格式存储,无论您在代码中使用什么表示法。符号相关的唯一点是用户交互或编码期间,例如输入和输出数字,或在代码中指定常量。