将JavaString十六进制数转换为int十六进制数

Convert Java String hexadecimal number to int hexadecimal number

我需要弄清楚,如何设置十六进制数 0xffff,它在下面的代码中动态地用于按位与。

int offsetData = address & 0xffff;

例如我需要这样的东西:

int offsetData = address & myHexaValue;

我有一个十进制 int 值,我需要用十六进制格式代替 myHexaValue.

这是我现在的状态。

int decimalShift = 16*8;    
String myHexaValueString = Integer.toHexString(decimalShift);

现在..我可以将我的字符串六进制数转换为整数六进制数,以便我可以将结果放入 myHexaValue 吗?

您不需要转换它。没有十六进制数这样的东西。以十六进制书写的数字是以 16 进制表示法书写的数字。我们通常使用 base 10 表示法,所以我们有从 0 到 9 的数字,但在十六进制表示法中,你有从 0 到 F 的数字。 所以只做一个and操作:

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;
    }

保罗解释:"bitshifting with >> fills the most signifcant bits with the value of the MSB before shifting, so in this code all bits except for the numOfOnes lowest bits are filled with 1s and afterwards the number is inverted."

数字不是 "hexadecimal" 或 "decimal"。这只是因为懒惰而使用的不精确拼写。数字 表示 十进制或十六进制将是精确的。无需将 int 从十进制转换为十六进制。事实上,无论您在代码中使用什么表示法,它们都存储在 binary-format 中。唯一与符号相关的点是 user-interactions 或编码期间,例如输入和输出数字,或在代码中指定常量。

使用Integer.parseInt(),指定基数为16:

int number = Integer.parseInt(myHexaNumber, 16);