我已经生成了一个安全的随机数,并将其值放入一个字节中。这是我的代码。在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