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

将Java字符串十六进制数转换为int十六进制数,java,hex,bit-manipulation,Java,Hex,Bit Manipulation,我需要弄清楚,如何设置十六进制数0xffff,它用于按位和下面的代码中 int offsetData = address & 0xffff; 例如,我需要这样的东西: int offsetData = address & myHexaValue; 我有一个十进制int值,我需要用十六进制格式来代替我的十六进制值 这是我现在的状态 int decimalShift = 16*8; String myHexaValueString = Integer.toHexStrin

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

int offsetData = address & 0xffff;
例如,我需要这样的东西:

int offsetData = address & myHexaValue;
我有一个十进制int值,我需要用十六进制格式来代替我的十六进制值

这是我现在的状态

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

现在。。我可以将字符串十六进制数转换为int十六进制数,以便将结果转换为myHexaValue吗?

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

int offsetData = address & decimalShift;
编辑: 要仅获取较低的16位,请使用掩码。 0xffff并执行一个&操作,高16位将设置为0,低16位将保持不变。 因此:

编辑2: 要获得任意位数(0,…,31)的掩码,可以使用此函数:

private static int getMask(int numOfOnes) {
        int i = 0x80000000;
        i = i>>(32-numOfOnes-1);
        i = ~i;
        return i;
    }
Pauls解释:“在移位之前,用>>进行位移位会用MSB的值填充最重要的位,因此在该代码中,除最低位以外的所有位都用1s填充,然后数字被反转。”

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

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

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

你不能直接写
intmyhexavalue=0xffff?也许我不明白,但它如何解决我的问题?我需要动态设置这个hexa值。方法是只获取十进制值。我的目标是获取(32位)整数最后位的“一些数字”。如果是16位,解决方案将是int val=x&0xffff。。。我需要弄清楚,如何得到n个数字。请告诉我,如果我需要例如8和5个低位,代码会发生什么变化?非常感谢。我仍然不知道,这里有什么用途&decimalShift.note关于EDIT2:bitshifting with
>
在移位前用MSB的值填充最重要的位,因此在这段代码中,除了
numoffone
最低位之外的所有位都用1填充,然后数字被反转。我添加了你的(@Paul)解释是答案的一部分,所以它更引人注目。@someone\u某处谢谢,希望你能这样做,只是不想自己编辑答案,因为这毕竟是一个很好的答案。但由于OP显然不太擅长数字系统和位运算,我认为这应该是答案的一部分。
int number = Integer.parseInt(myHexaNumber, 16);