[英]Converting from byte to int in Java
我生成了一個安全的隨機數,並將其值放入一個字節中。 這是我的代碼。
SecureRandom ranGen = new SecureRandom();
byte[] rno = new byte[4];
ranGen.nextBytes(rno);
int i = rno[0].intValue();
你的數組是byte
原語,但你試圖調用它們的方法。
您無需執行任何顯式操作即可將byte
轉換為int
,只需:
int i=rno[0];
...因為這不是沮喪。
請注意, byte
到int
轉換的默認行為是保留值的符號(請記住, byte
是 Java 中的有符號類型)。 所以例如:
byte b1 = -100;
int i1 = b1;
System.out.println(i1); // -100
如果您將byte
視為無符號(156)而不是有符號(-100),那么從 Java 8 開始,就有Byte.toUnsignedInt
:
byte b2 = -100; // Or `= (byte)156;`
int = Byte.toUnsignedInt(b2);
System.out.println(i2); // 156
在 Java 8 之前,要在int
獲得等效值,您需要屏蔽符號位:
byte b2 = -100; // Or `= (byte)156;`
int i2 = (b2 & 0xFF);
System.out.println(i2); // 156
只是為了完整性 #1:如果您出於某種原因確實想使用Byte
的各種方法(您不需要在這里),您可以使用裝箱轉換:
Byte b = rno[0]; // Boxing conversion converts `byte` to `Byte`
int i = b.intValue();
或Byte
構造函數:
Byte b = new Byte(rno[0]);
int i = b.intValue();
但同樣,你在這里不需要那個。
只是為了完整性#2:如果它是向下轉換(例如,如果您嘗試將int
轉換為byte
),那么您只需要一個轉換:
int i;
byte b;
i = 5;
b = (byte)i;
這向編譯器保證您知道這是一個向下轉換,因此您不會收到“可能的精度損失”錯誤。
byte b = (byte)0xC8;
int v1 = b; // v1 is -56 (0xFFFFFFC8)
int v2 = b & 0xFF // v2 is 200 (0x000000C8)
大多數時候 v2 是您真正需要的方式。
如果你想將 4 個字節組合成一個 int 你需要做
int i= (rno[0]<<24)&0xff000000|
(rno[1]<<16)&0x00ff0000|
(rno[2]<< 8)&0x0000ff00|
(rno[3]<< 0)&0x000000ff;
我使用 3 個特殊運算符|
是按位邏輯 OR &
是邏輯 AND 而<<
是左移
本質上,我通過將字節移位並將它們組合在一起,將 4 個 8 位字節組合成一個 32 位 int
我還確保任何符號提升都不會影響& 0xff
的結果
原始數據類型(如byte)在java中沒有方法,但是可以直接做:
int i=rno[0];
我以為會是:
byte b = (byte)255;
int i = b &255;
字節被透明地轉換為整數。
說啊
int i= rno[0];
int b = Byte.toUnsignedInt(a);
"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.