java byte数组与16进制间相互转换的示例
1.准备工作
importjava.util.Arrays; /** *Byte[]与hex的相互转换 *@explain *@authorMarydon *@creationTime2018年6月11日下午2:29:11 *@version1.0 *@since *@emailmarydon20170307@163.com */ publicclassByteUtils{ //16进制字符 privatestaticfinalchar[]HEX_CHAR={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; }
2.byte类型数组转化成16进制字符串
方法一
/** *方法一:将byte类型数组转化成16进制字符串 *@explain字符串拼接 *@parambytes *@return */ publicstaticStringtoHexString(byte[]bytes){ StringBuildersb=newStringBuilder(); intnum; for(byteb:bytes){ num=b<0?256+b:b; sb.append(HEX_CHAR[num/16]).append(HEX_CHAR[num%16]); } returnsb.toString(); }
方法二
/** *方法二:byte[]tohexstring *@explain使用数组 *@parambytes *@return */ publicstaticStringtoHexString2(byte[]bytes){ //一个byte为8位,可用两个十六进制位表示 char[]buf=newchar[bytes.length*2]; inta=0; intindex=0; //使用除与取余进行转换 for(byteb:bytes){ if(b<0) a=256+b; else a=b; //偶数位用商表示 buf[index++]=HEX_CHAR[a/16]; //奇数位用余数表示 buf[index++]=HEX_CHAR[a%16]; } //char[]-->String returnnewString(buf); }
方法三
/** *方法三:byte[]-->hexString *@explain使用位运算 *@parambytes *@return */ publicstaticStringtoHexString3(byte[]bytes){ char[]buf=newchar[bytes.length*2]; intindex=0; //利用位运算进行转换,可以看作方法二的变型 for(byteb:bytes){ buf[index++]=HEX_CHAR[b>>>4&0xf]; buf[index++]=HEX_CHAR[b&0xf]; } returnnewString(buf); }
方法四
/** *方法四:byte[]-->hexString *@parambytes *@return */ publicstaticStringtoHexString4(byte[]bytes){ StringBuildersb=newStringBuilder(bytes.length*2); //使用String的format方法进行转换 for(byteb:bytes){ sb.append(String.format("%02x",newInteger(b&0xff))); } returnsb.toString(); }
方法五
/** *将byte数组转换成16进制字符串 * *@paramsrc *@return */ privatestaticStringbytesToHexString(byte[]src){ StringBuildersb=newStringBuilder(); for(inti=0;i3.16进制字符串转换为byte[]
方法一
/** *将16进制字符串转换为byte[] *@explain16进制字符串不区分大小写,返回的数组相同 *@paramhexString *16进制字符串 *@returnbyte[] */ publicstaticbyte[]fromHexString(StringhexString){ if(null==hexString||"".equals(hexString.trim())){ returnnewbyte[0]; } byte[]bytes=newbyte[hexString.length()/2]; //16进制字符串 Stringhex; for(inti=0;i十进制 bytes[i]=(byte)Integer.parseInt(hex,16); } returnbytes; } 方法二
/** *将16进制转换为byte[] *@paramhexStr *@return */ publicstaticbyte[]fromHex(StringhexStr){ if(hexStr.length()<1) returnnull; byte[]result=newbyte[hexStr.length()/2]; for(inti=0;i方法三:
publicstaticbyte[]toByteArray(Stringdata){ if(data==null){ returnnewbyte[]{}; } if(data.length()==0){ returnnewbyte[]{}; } while(data.length()<2){ data="0"+data; } if(data.substring(0,2).toLowerCase().equals("0x")){ data=data.substring(2); } if(data.length()%2==1){ data="0"+data; } data=data.toUpperCase(); byte[]bytes=newbyte[data.length()/2]; StringhexString="0123456789ABCDEF"; for(inti=0;i4.测试
publicstaticvoidmain(String[]args)throwsException{ Stringjson="{\"name\":\"Marydon\",\"website\":\"http://www.cnblogs.com/Marydon20170307\"}"; byte[]bytes=json.getBytes("utf-8"); System.out.println("字节数组为:"+Arrays.toString(bytes)); System.out.println("byte数组转16进制之方法一:"+toHexString(bytes)); System.out.println("byte数组转16进制之方法二:"+ByteUtils.toHexString2(bytes)); System.out.println("byte数组转16进制之方法三:"+ByteUtils.toHexString3(bytes)); System.out.println("byte数组转16进制之方法四:"+ByteUtils.toHexString4(bytes)); System.out.println("=================================="); Stringstr="7b226e616d65223a224d617279646f6e222c2277656273697465223a22687474703a2f2f7777772e636e626c6f67732e636f6d2f4d617279646f6e3230313730333037227d"; System.out.println("转换后的字节数组:"+Arrays.toString(fromHexString(str))); System.out.println(newString(fromHexString(str),"utf-8")); }补充
1B=8b,也就是1byte=8bit;
1KB=1024B;
1MB=1024KB;
1GB=1024MB;
1TB=1024GB
bit是计算机最小的存储单元,只能存储0和1,是Binarydigit(二进制数位)的缩写,意为“位”或“比特”,也就是二进制。
以上就是javabyte数组与16进制间相互转换的示例的详细内容,更多关于javabyte数组与16进制间的资料请关注毛票票其它相关文章!