[英]Converting int to byte[]
我正在從Android屏幕上讀取一個值,並嘗試將其轉換為byte []以通過藍牙發送該值,但是每次我從屏幕上獲取128時,它將在byte []中將其轉換為-128,然后我什么都沒得到。.是什么問題。.為什么給負數?
這是轉換代碼:
ByteBuffer.allocate(4).putInt(yourInt).array();
編輯:另一方面,我必須將byte []轉換為String。
另一個問題..如果我降低了allocate()
的數字,即使我僅在數組中使用1個位置,我也會得到BufferOverflowException。 為什么?
編輯2:我正在使用8位數字(0-255)
public static void main(String[] args) {
byte[] num = BigInteger.valueOf(-2147483648).toByteArray();
System.out.println(new BigInteger(num).intValue());
}
如果您只想傳輸一個字節,值為0-255,則
public static void main(String[] args) {
for(int i=0; i<=255; i++){
byte a = (byte) i;
byte[] num = new byte [] {(byte) a};
System.out.println(num[0] + " : " + i + " : " + ((256+num[0]) % 256));
}
}
第二個代碼將一個字節變量轉換為相等的整數輸出。
代碼執行此操作的原因是因為整數(128)看起來像二進制的1000000
,帶有一堆前導零。 由於所有Java原語都經過簽名,因此前導位為0,這樣就可以了。 但是,當轉換為字節時,前導位將被解釋為符號位,因此最后一個byte
被解釋為負數。
文檔也很清楚, putInt()
將整數的所有4個字節寫入緩沖區,而不是僅將“已使用”的字節寫入緩沖區。
您正在ByteBuffer中看到正確的值。 緩沖區的最后一個字節的字節值為0x80,如果您在笨拙的終端中顯示該符號,則將其擴展為更長的int值-128。
BYTE VALUES
1000 0000
該高位通常在帶符號的字節/短/整數系統中指定一個負數。
如果僅在前面加1位,就將此帶符號的字節轉換為較大的類型(如int),則會看到以下內容:
1111 1111 1111 1111 1111 1111 1000 0000
表示-128為有符號int。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.