浅谈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
以上这篇浅谈二进制、十进制、十六进制、字符串之间的相互转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。