浅谈java二进制、十进制、十六进制、字符串之间的相互转换
1.字节转10进制
直接使用(int)类型转换。
/* *字节转10进制 */ publicstaticintbyte2Int(byteb){ intr=(int)b; returnr; }
/* *10进制转字节 */ publicstaticbyteint2Byte(inti){ byter=(byte)i; returnr; }
3.字节数组转16进制字符串
对每一个字节,先和0xFF做与运算,然后使用Integer.toHexString()函数,如果结果只有1位,需要在前面加0。
/* *字节数组转16进制字符串 */ publicstaticStringbytes2HexString(byte[]b){ Stringr=""; for(inti=0;i<b.length;i++){ Stringhex=Integer.toHexString(b[i]&0xFF); if(hex.length()==1){ hex='0'+hex; } r+=hex.toUpperCase(); } returnr; }
4.16进制字符串转字节数组
这个比较复杂,每一个16进制字符是4bit,一个字节是8bit,所以两个16进制字符转换成1个字节,对于第1个字符,转换成byte以后左移4位,然后和第2个字符的byte做或运算,这样就把两个字符转换为1个字节。
/* *字符转换为字节 */ privatestaticbytecharToByte(charc){ return(byte)"0123456789ABCDEF".indexOf(c); } /* *16进制字符串转字节数组 */ publicstaticbyte[]hexString2Bytes(Stringhex){ if((hex==null)||(hex.equals(""))){ returnnull; } elseif(hex.length()%2!=0){ returnnull; } else{ hex=hex.toUpperCase(); intlen=hex.length()/2; byte[]b=newbyte[len]; char[]hc=hex.toCharArray(); for(inti=0;i<len;i++){ intp=2*i; b[i]=(byte)(charToByte(hc[p])<<4|charToByte(hc[p+1])); } returnb; } }
5.字节数组转字符串
直接使用newString()。
/* *字节数组转字符串 */ publicstaticStringbytes2String(byte[]b)throwsException{ Stringr=newString(b,"UTF-8"); returnr; }
直接使用getBytes()。
/* *字符串转字节数组 */ publicstaticbyte[]string2Bytes(Strings){ byte[]r=s.getBytes(); returnr; }
先转换成byte[],再转换成字符串。
/* *16进制字符串转字符串 */ publicstaticStringhex2String(Stringhex)throwsException{ Stringr=bytes2String(hexString2Bytes(hex)); returnr; }
先转换为byte[],再转换为16进制字符串。
/* *字符串转16进制字符串 */ publicstaticStringstring2HexString(Strings)throwsException{ Stringr=bytes2HexString(string2Bytes(s)); returnr; }
main函数:
publicstaticvoidmain(String[]args)throwsException{ byteb1=(byte)45; System.out.println("1.字节转10进制:"+byte2Int(b1)); inti=89; System.out.println("2.10进制转字节:"+int2Byte(i)); byte[]b2=newbyte[]{(byte)0xFF,(byte)0x5F,(byte)0x6,(byte)0x5A}; System.out.println("3.字节数组转16进制字符串:"+bytes2HexString(b2)); Strings1=newString("1DA47C"); System.out.println("4.16进制字符串转字节数组:"+Arrays.toString(hexString2Bytes(s1))); System.out.println("5.字节数组转字符串:"+bytes2String(b2)); System.out.println("6.字符串转字节数组:"+Arrays.toString(string2Bytes(s1))); System.out.println("7.16进制字符串转字符串:"+hex2String(s1)); Strings2=newString("Hello!"); System.out.println("8.字符串转16进制字符串:"+string2HexString(s2)); }
运行结果:
1.字节转10进制:45 2.10进制转字节:89 3.字节数组转16进制字符串:FF5F065A 4.16进制字符串转字节数组:[29,-92,124] 5.字节数组转字符串:?_Z 6.字符串转字节数组:[49,68,65,52,55,67] 7.16进制字符串转字符串:?| 8.字符串转16进制字符串:48656C6C6F21
以上这篇浅谈二进制、十进制、十六进制、字符串之间的相互转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。