簡體   English   中英

如何在Java中將int轉換為十六進制?

[英]How to convert int to hex in java?

public void int2byte(){
    int x = 128;
    byte y = (byte) x;
    System.out.println(Integer.toHexString(y));
}

我得到的結果是ffffff80,為什么不是80? 當x = 127時我得到結果7f。

字節在Java中簽名。 當將128為一個byte ,它將變為-128

int 128 :00000000 00000000 00000000 10000000

byte -128 :10000000

然后,當您使用Integer.toHexString將其擴展回int時,由於它現在是負數,因此將對其進行符號擴展。 這意味着將顯示一堆1位,從而在十六進制輸出中解釋了額外的f字符。

您可以使用Byte.toUnsignedInt以無符號方式轉換它,以防止符號擴展。

通過無符號轉換將參數轉換為int 在無符號轉換為一個int ,所述的高階24位int是零和低位8位都等於的比特byte的參數。

System.out.println(Integer.toHexString(Byte.toUnsignedInt(y)));

另一種方法是通過手動保留byte的8位來對符號擴展位進行位屏蔽:

System.out.println(Integer.toHexString(y & 0xFF));

無論哪種方式,輸出為:

80

這是因為不能用帶符號的字節表示128的正值

范圍是-128 to 127

所以您的int變成了符號擴展,所以得到0xffffff80而不是0x00000080

編輯:正如其他人解釋的那樣:

整數128與字節(-128)共享最后8位

區別在於整數128具有前導零。

0x00000080    (0000 0000 0000 0000 0000 0000 1000 0000)

而字節-128只是

      0x80    (1000 0000)

當您使用Integer.toHexString()轉換字節-128時,它采用前導1並對其進行符號擴展,因此您得到

0xffffff80    (1111 1111 1111 1111 1111 1111 1000 0000)

暫無
暫無

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

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