将Java String十六进制数转换为int十六进制数

时间:2016-01-17 20:24:53

标签: java hex bit-manipulation

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

int offsetData = address & 0xffff;

例如我需要这样的东西:

int offsetData = address & myHexaValue;

我有一个十进制int值,我需要用十六进制格式而不是 myHexaValue

这是我现在的状态。

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

现在..我可以将我的String hexa数转换为int hexa数,这样我就可以将结果输入 myHexaValue 了吗?

3 个答案:

答案 0 :(得分:2)

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

int offsetData = address & decimalShift;

编辑: 仅获得较低的16位使用掩码。 0xffff并执行&操作高16位将设置为0,低16位将保持不变。 这样:

int offsetData = address & decimalShift & 0xffff;

EDIT2: 要获得任何数字(0,...,31)位的掩码,您可以使用此功能:

private static int getMask(int numOfOnes) {
        int i = 0x80000000;
        i = i>>(32-numOfOnes-1);
        i = ~i;
        return i;
    }

Pauls解释:"使用>>进行位移在移位之前用MSB的值填充最重要的位,因此在此代码中除了numOfOnes最低位之外的所有位都用1填充,之后数字被反转。"

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

数字不是“十六进制”或“十进制”。这只是因为懒惰而使用的不精确拼写。数字表示十进制或十六进制是精确的。无需将int从十进制转换为十六进制。事实上,无论您在代码中使用何种符号,它们都以二进制格式存储。符号相关的唯一点是用户交互或编码期间,如输入和输出数字,或在代码中指定常量。