[英]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( );
請注意,字節不是0
到255
! 從-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.