将Java字符串十六进制数转换为int十六进制数
我需要弄清楚,如何设置十六进制数0xffff,它用于按位和下面的代码中将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
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);