将 Java 字符串十六进制数转换为整数十六进制数



我需要弄清楚,如何设置十六进制数字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从十进制转换为十六进制。事实上,它们以二进制格式存储,无论您在代码中使用什么表示法。符号相关的唯一点是用户交互或编码期间,例如输入和输出数字,或在代码中指定常量。

最新更新