簡體   English   中英

Java整數到字節

[英]Java integer to byte

我有以下代碼:

byte[] someArray;
int a,b;
.
.
.
a=123; (result coming from calculations, always 0>=a<256)
b=91; (result coming from calculations, always 0>=b<256)

現在我想這樣做

someArray[0]=a;
someArray[6]=b;

但是我試圖將其轉換為字節,但我失敗了(得到了我認為的所有可能的錯誤消息)。 還嘗試了各種涉及整數到字節轉換的代碼片段。

有什么想法嗎?

更新這是我得到的java.lang.NumberFormatException:無效的int:當我嘗試此byteArray [0] = Integer.valueOf(String.valueOf(bani.substring(2,3)),16).byteValue( );

integer -> byte轉換將導致編譯錯誤,因為這可能會導致精度損失。 文檔。

但是,您可以進行顯式轉換

someArray[0]=(byte)a;

請注意,字節不是0255 -128+127

如果您知道這一點,只需將值轉換

someArray[0] = (byte) a;
someArray[6] = (byte) b;

但是請用支票將其圍繞起來,因為java會強制您執行所有操作:

if(value <= Byte.MAX_VALUE && value >= Byte.MIN_VALUE) {
    //do the cast
}
else {
    //error handling
}

例如:

int i = 1300;
byte b = (byte) i;
//b will be 20 here

更新:

如果要調用NumberFormatException ,則可以解析如下所示的值:

Byte.valueOf(Integer.toString(value));

請記住,該字節是從-128到127!

首先, Java中沒有未簽名的數據類型。 它們都是帶符號的 byte是帶符號的數據類型,並且可以保存-128 <= b => 127范圍內的值。 其次,您需要從整數值中減去128,然后將其強制轉換為byte ,以獲取byte可以容納的值:

someArray[0] = (byte) (a - 128);
someArray[6] = (byte) (b - 128);

在Java中,整數原始類型(字節,短,整數,長整數)始終被簽名。

因此,字節始終為-128 ... 127

您可以使用強制轉換將int轉換為字節

int i = 120;

byte b = (byte) i;

如果將200分配給i而不是120,則b變為-56,將b分配給i,則我將保持為-56而不再次變為200。

這是因為200的二進制表示形式是11001000,並將這些位放入一個字節,然后將其解釋為-56,再次將其放入int使其變為1111111111111111111111001000

我不確定您為此開發的應用程序涉及內存使用的程度:-)。 HBase API中有一個API Bytes.toBytes() 您可以使用此API獲取許多類型的字節表示。 也許您可以像Bytes.toInt()一樣使用它的逆向轉換。 據我所知,沒有發現精度損失或價值變化的問題。

您可以從此處下載庫。Hbase Lib ..將庫中的hbase-0.94.jar添加到您的項目中。

為了保證對於Byte.MAX_VALUE以上和Byte.MIN_VALUE以下的值沒有錯誤,您可以使用bitwize操作施加最大值:

public static byte toByte(int i){
    return (byte) (i & 0x000000ff);
}

這將忽略前8位以上的所有位。因此,將為您提供任何int的有效字節(丟失24個最高位)。

如果您大量使用此操作,則此字節要比比較和強制轉換快得多。

暫無
暫無

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

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