我已經生成了一個安全的隨機數,並將其值放入一個字節中。這是我的代碼。在java中從字節轉換爲int
SecureRandom ranGen = new SecureRandom();
byte[] rno = new byte[4];
ranGen.nextBytes(rno);
int i = rno[0].intValue();
但我得到一個錯誤:
byte cannot be dereferenced
我已經生成了一個安全的隨機數,並將其值放入一個字節中。這是我的代碼。在java中從字節轉換爲int
SecureRandom ranGen = new SecureRandom();
byte[] rno = new byte[4];
ranGen.nextBytes(rno);
int i = rno[0].intValue();
但我得到一個錯誤:
byte cannot be dereferenced
你的數組是byte
基元,但你試圖調用它們的方法。
你不需要做任何明確的轉換一個byte
到int
,只是:
int i=rno[0];
...因爲它不是一個垂頭喪氣。
只是爲了完整性#1:如果你沒有要使用的Byte
各種方法出於某種原因(你就不需要在這裏),你可以使用一個boxing conversion:
Byte b = rno[0]; // Boxing conversion converts `byte` to `Byte`
int i = b.intValue();
Byte b = new Byte(rno[0]);
int i = b.intValue();
但同樣,你這裏不需要這個。
只是爲了完整性#2:如果是向下轉換(例如,如果你試圖在int
轉換爲byte
),你需要的是一個投:
int i;
byte b;
i = 5;
b = (byte)i;
這可以確保編譯器知道這是一個低落的,所以你不會得到「可能的精度損失」錯誤。
使用字節構造函數不是一個好主意。只要做'Byte b = rno [0];'而不是。 – xehpuk 2014-02-11 10:20:47
@xehpuk:我應該提到拳擊轉換,現在就完成了。 – 2014-02-11 10:34:54
在這種情況下,爲什麼拳擊轉換優於字節構造函數?根據我的理解,拳擊轉換最終以任何方式結束使用字節構造函數?我的理解是不正確的? – user3772575 2017-11-30 14:57:19
,如果你想在4個字節組合成一個單一的詮釋,你需要做的
int i= (rno[0]<<24)&0xff000000|
(rno[1]<<16)&0x00ff0000|
(rno[2]<< 8)&0x0000ff00|
(rno[3]<< 0)&0x000000ff;
我用3個特殊運營商|
是按位邏輯或&
是邏輯與和<<
是左移
實質上,我將4個8位字節組合成一個單一的32位int sh ifting到位字節,或運算在一起
我也確保任何標誌的推廣不會& 0xff
byte b = (byte)0xC8;
int v1 = b; // v1 is -56 (0xFFFFFFC8)
int v2 = b & 0xFF // v2 is 200 (0x000000C8)
大部分時間V2的影響結果是你真正需要的方式。
這是因爲32位機器生成長0xffffffc8,謝謝。 – herbertD 2017-12-17 16:23:43
我認爲這將是:
byte b = (byte)255;
int i = b &255;
* *什麼錯誤你好嗎? – 2012-03-06 10:11:23
字節和字節之間有區別。後者是一個支持'.intValue()'方法的對象。第一個是原始字節值,只是將它賦值爲'int i = rno [0];' – wuppi 2012-03-06 10:20:25
另請參見http://stackoverflow.com/questions/2383265/convert-4-bytes-to-int – DNA 2012-03-06 10:58:34