1.byte转换为int
在Java语言中,byte 和 int都是有符号的,它们的数值都是用补码做计算的。
byte的数值范围是:-128 ~ +127 。高位为1表示负数,0表示正数。
如果在业务中遇到传输的数据是无符号的,就会存在问题。比如远程设备给我们传过来一个0xfe的数据:
0xfe,无符号的时候表示的是254,二进制为 11111110 。但是在Java程序里面,0xfe在byte中的值却表示的是-2 ,这就会出现问题。
如果用int数据类型来放0xfe,是没问题的。因为int虽然也是有符号的,但是它的表示范围为-2147483648到+2147483647,足够表示0xfe的值。
于是我们就需要byte转换为int做处理,需要注意的是,Java中扩展字节符号默认是不变的,也就是说高位补位全是1,需要做符号处理:
byte b = 0xfe;
int i = b;
i = i & 0xFF;
2.int转换为long
如果表示的范围超过了int的范围,同样也需要扩展,但是验证后发现使用&0xFFFFFFFF的方式并没用,需要使用其他的方法:
int k1 = 0xfeffffff;
long k11 = (k1 >>> 24) * 256 * 256 * 256L + ((k1 >>> 16) & 0xFF) * 256 *256 + ((k1 >>> 8) & 0xFF) *256 + (k1 & 0xFF);
或者
int k1 = 0xfeffffff;
long k12 = (k1 >>> 24) * 256 * 256 * 256L + (k1 & 0xFF0000) + (k1 & 0xFF00) + (k1 & 0xFF);
都可以实现正确地扩容,原来表示的无符号数据值可以保持相同的值。