Java基础:二进制转换

    JAVA中的二进制用途:在跨平台中的应用:文件读写、数据通信
     数据通信过程中,若客户端和服务器端都采用java语言,则客户端进行通信时给服务器端发送系列化的对象。将服务器端的语言改为C语言则会提高速度,C语言作为底层语言,比java语言快。改为C语言后,若客户端发送的仍然是系列化的对象,则服务器端无法解析。解决方法:将数据用二进制来表示,达到跨平台的兼容
     java中的数据类型:
     1、int型的数据类型:byte 8位;short 16位;int 32位;long 64位;
     2、float型数据类型:单精度(32位);双精度(64位);
     3、boolean型:1位;
     4、char型数据类型:unicode字符,16位;

     对应的类的类型为:Integer Float Boolean Character Double Short Byte Long

    一、将十进制转化为其他进制:如将十进制112分别转化为二进制、八进制、十六进制

    System.out.println(Integer.toBinaryString(112));//二进制
    System.out.println(Integer.toHexString(112));//十六进制
    System.out.println(Integer.toOctalString(112));//八进制

输出结果为:

1110000
70
160

  二、将其他进制转化为十进制:

    System.out.println(Integer.parseInt("111001",2));//二进制
    System.out.println(Integer.parseInt("27",8));//八进制
    System.out.println(Integer.parseInt("A8",16));//十六进制

输出结果为:

57
23
168

三、将各种数据类型转化为字节数组:

public byte[] intTobytes(int id) {
        byte[] arr=new byte[8];
        for(int i=0;i<arr.length;i++) {
            arr[i]=(byte)((int)(id>>i*8)&(0xff));
        }
        return arr;
    }

如将整数8413作为参数传入该函数,则先将8143转换为二进制进行右移运算,即对00000000 00000000 00011111 11001111进行右移运算并和16进制0xff进行与运算

arr[0],右移0位,和11111111相与,得11001111,负数以其正值的补码形式表示,因此首先对该补码减一得到反码:

11001110。取反得到原码:00110001,该原码对应的真值为49,则表示的负数为-49;

arr[1],右移8位,得到00000000 00000000 00000000 00011111,与0xff进行与运算,得到00011111,表示的正值为31;

arr[2],右移16位,得到00000000 00000000 00000000 00000000,与运算之后得到正值为0,同理arr[3]也为0;

四、将字节码转换成相应的数据类型:

public int byteToInt(byte[] arr) {
        int[] newint=new int[4];
        int result=0;
        for(int i=0;i<4;i++) {
            newint[i]=(int)((arr[i]&(0xff))<<i*8);
            result+=newint[i];
        }
        return result;
    }

仍然对于8143,求得字节码[-49,31,0,0]之后,转换成相应的数据类型:

-49:进行与运算左移0位之后得207;

31:进行与运算之后左移8位之后得到00011111 00000000,转换为int为7936;

0:进行与运算之后左移16位得到00000000 00000000 00000000,转换为int为0;

0:进行与运算之后左移24位得到00000000 00000000 00000000 00000000,转换为int为0;

则最终得到的int值为207,7936,0,0之和,为8143;



相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页