在 Java 中从字节转换为 int
2022-08-31 17:40:54
我生成了一个安全的随机数,并将其值放入一个字节中。这是我的代码。
SecureRandom ranGen = new SecureRandom();
byte[] rno = new byte[4];
ranGen.nextBytes(rno);
int i = rno[0].intValue();
但是我收到一个错误:
byte cannot be dereferenced
我生成了一个安全的随机数,并将其值放入一个字节中。这是我的代码。
SecureRandom ranGen = new SecureRandom();
byte[] rno = new byte[4];
ranGen.nextBytes(rno);
int i = rno[0].intValue();
但是我收到一个错误:
byte cannot be dereferenced
您的数组是基元的,但您正在尝试对它们调用方法。byte
您无需执行任何显式操作即可将 a 转换为 , 只需:byte
int
int i=rno[0];
...因为它不是一个低迷。
请注意,-to- 转换的默认行为是保留值的符号(请记住,在 Java 中是有符号类型)。例如:byte
int
byte
byte b1 = -100;
int i1 = b1;
System.out.println(i1); // -100
如果你认为是无符号(156)而不是符号(-100),那么从Java 8开始,有Byte.toUnsignedInt
:byte
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 b = new Byte(rno[0]);
int i = b.intValue();
但同样,你在这里不需要它。
只是为了完整性#2:如果它是一个向下的(例如,如果你试图将an转换为a),你所需要的只是一个cast: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 是你真正需要的方式。