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;i
3.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;i
4.测试
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进制间的资料请关注毛票票其它相关文章!