簡體   English   中英

將int轉換為byte []

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

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