[英]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.