如何使用Java屏蔽十六进制int?

E2r*_*abi 4 java hex

我有一个包含hexa值的整数.我想从这个hexa值中提取第一个字符,就像它是一个String值,但我不想将它转换为String.

int a = 0x63C5;
int afterMask= a & 0xFFF;
System.out.println(afterMask); // this gives me "3C5" but I want to get the value "63C" 
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我不能使用像substring.

Jon*_*eet 10

重要的是要理解整数只是一个数字.两者之间没有区别:

int x = 0x10;
int x = 16;
Run Code Online (Sandbox Code Playgroud)

两者都以具有相同值的整数结束.第一个在源代码中写为十六进制,但它仍然代表相同的值.

现在,当涉及到屏蔽时,考虑到操作将按位执行,最简单的方法是用二进制来考虑它.所以听起来你想要原始值的4-15位,但后来转移到结果的0-11位.

这最简单的表达为面具,然后是一个转变:

int afterMask = (a & 0xFFF0) >> 4;
Run Code Online (Sandbox Code Playgroud)

或者转移然后是面具:

int afterMask = (a >> 4) & 0xFFF;
Run Code Online (Sandbox Code Playgroud)

两者都会给你一个(十进制)1596 =(十六进制)63C的值.

在这种特殊情况下,由于您的输入在12+位中没有任何内容,因此掩码是不必要的 - 但如果您想要(例如)0x1263c5的输入仍然给出对应于0x63c的输出,那么就是这样.


Ell*_*sch 9

如果你想要"63C",你只需要向右移动4位(放下最右边的半字节).喜欢,

int a = 0x63C5;
int afterMask = a >> 4;
System.out.println(Integer.toHexString(afterMask));
Run Code Online (Sandbox Code Playgroud)

产出(按要求)

63C

  • 正确,但是你被jon骂了 (6认同)