一、 java 中byte 和int 等都是有符号的,java byte转int 会有两种情况。
1.1 带符号转换,保持数值不变。
bytedata = 0xFF(即数值为-1),int i = bytedata,则转化为int后,i为0xFFFFFFFF,数值仍为-1。
1.2 无符号转换,保持最低字节中各个位不变,3个高字节全部用0填充。
bytedata = 0xFF (即数值为-1),int i = bytedata & 0xFF,则转化为int后,i为0x000000FF,数值为0xFF。
无符号转换可以调用 Byte.toUnsignedInt(b) Byte类里面的toUnsignedInt 函数进行转换,实际上是调用((int) x) & 0xff。
public static int toUnsignedInt(byte x) {
return ((int) x) & 0xff;
}
1.3 测试代码
public class Main {
public static void main(String[] args) {
byte data[] = {0x05,0x12,(byte)0xf8,0x78};
int i ;
System.out.println("***********one***********");
for(int n=0;n < data.length;n++)
{
i = data[n];
System.out.println("i"+"["+n+"]="+i + " 0x" + Integer.toHexString(data[n])+" 0x"+Integer.toHexString(i));
}
System.out.println("***********two***********");
for(int n=0;n < data.length;n++)
{
i = data[n] & 0xFF;
System.out.println("i"+"["+n+"]="+i + " 0x" + Integer.toHexString(data[n])+" 0x"+Integer.toHexString(i));
}
System.out.println("***********three***********");
for(int n=0;n < data.length;n++)
{
i = Byte.toUnsignedInt(data[n]);
System.out.println("i"+"["+n+"]="+i + " 0x" + Integer.toHexString(data[n])+" 0x"+Integer.toHexString(i));
}
System.out.println("int size:"+Integer.SIZE);
}
}
标准输出:
***********one***********
i[0]=5 0x5 0x5
i[1]=18 0x12 0x12
i[2]=-8 0xfffffff8 0xfffffff8
i[3]=120 0x78 0x78
***********two***********
i[0]=5 0x5 0x5
i[1]=18 0x12 0x12
i[2]=248 0xfffffff8 0xf8
i[3]=120 0x78 0x78
***********three***********
i[0]=5 0x5 0x5
i[1]=18 0x12 0x12
i[2]=248 0xfffffff8 0xf8
i[3]=120 0x78 0x78
int size:32
二、int 转成 byte,实例测试;
public class Main {
public static void main(String[] args) {
int i =0x1234f6;
System.out.println("0x" + Integer.toHexString(i));
byte[] data = new byte[4];
data[0] = (byte)((i >> 24) & 0xFF);
data[1] = (byte)((i >> 16) & 0xFF);
data[2] = (byte)((i >> 8) & 0xFF);
data[3] = (byte)(i & 0xFF);
for(int n = 0;n < data.length;n++){
System.out.println(n +":"+ data[n]);
}
System.out.println("int size:"+Integer.SIZE);
}
}
标准输出:
0x1234f6
0:0
1:18
2:52
3:-10
int size:32
三、参考文章
Java中byte转int的方法_java byte转int_kingzone_2008的博客-CSDN博客
Java byte转换为int_java byte转int-CSDN博客
Java中int和byte的互相转换_java int转byte_梅开二度%的博客-CSDN博客
java 中,将Int 或者 byte 数据用二进制或者16进制打印出来_java 打印16进制_云夏之家)的博客-CSDN博客