代码之家  ›  专栏  ›  技术社区  ›  e2rabi

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

  •  5
  • e2rabi  · 技术社区  · 7 年前

    我有一个包含十六进制值的整数。我想从这个六边形值中提取第一个字符,就像它是一个字符串值一样,但我不想将其转换为字符串。

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

    在我的情况下,我不能使用字符串实用程序,如 substring

    4 回复  |  直到 7 年前
        1
  •  11
  •   Jon Skeet    7 年前

    了解整数是 只是一个数字 。以下两者之间没有区别:

    int x = 0x10;
    int x = 16;
    

    两者最终都是具有相同值的整数。第一个是 以十六进制形式写入源代码 但它仍然表示相同的值。

    现在,当谈到掩蔽时,考虑到操作将按位执行,最简单的方法是用二进制来考虑。所以听起来像是需要原始值的4-15位,但随后被移位为结果的0-11位。

    这最简单地表示为一个掩码,然后是一个移位:

    int afterMask = (a & 0xFFF0) >> 4;
    

    或者先移位,然后蒙版:

    int afterMask = (a >> 4) & 0xFFF;
    

    两者都将给您一个(十进制)1596=(十六进制)63C的值。

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

        2
  •  9
  •   Elliott Frisch    7 年前

    如果想要“63C”,只需右移4位(将最右边的 nibble )。喜欢

    int a = 0x63C5;
    int afterMask = a >> 4;
    System.out.println(Integer.toHexString(afterMask));
    

    输出(按要求)

    63摄氏度

        3
  •  3
  •   Maciej    7 年前
      int a = 0x63C5;
      int aftermask = a >> 4 ;     
      System.out.println( String.format("%X", aftermask) );
    
        4
  •  0
  •   Daniel Rch.    4 年前

    需要使用的掩码是0XFFF0