簡體   English   中英

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

[英]How can I mask a hexadecimal int using Java?

我有一個包含六進制值的整數。 我想從這個六進制值中提取第一個字符,就像它是一個字符串值,但我不想將它轉換為一個字符串。

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

在我的情況下,我不能使用像substring這樣的 String 實用程序。

理解整數只是一個數字很重要。 之間沒有區別:

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 相對應的輸出,則會出現這種情況。

如果你想要“63C”,你只需要右移 4 位(去掉最右邊的半字節)。 喜歡,

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

輸出(根據要求)

63c

  int a = 0x63C5;
  int aftermask = a >> 4 ;     
  System.out.println( String.format("%X", aftermask) );

您需要使用的掩碼是 0XFFF0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM