1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java byte数组与十六进制字符串互转

Java byte数组与十六进制字符串互转

时间:2018-10-13 09:53:33

相关推荐

Java byte数组与十六进制字符串互转

Java byte数组与十六进制字符串互转

博客分类:Java

Javajava 十六进制java hex

Java 加密解密基础

Java byte数组与十六进制字符串互转

Java BASE64加密解密

Java 加密解密之消息摘要算法(MD5 SHA MAC)

Java 加密解密之对称加密算法DES

Java 加密解密之对称加密算法DESede

Java 加密解密之对称加密算法AES

Java 加密解密之对称加密算法PBE

Java byte数组与十六进制字符串互转

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示。

所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。

同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上。

根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。

Hex类代码如下:

Java代码

/***referenceapachecommons<a*href="/codec/">/codec/</a>**@authorAub**/publicclassHex{/***用于建立十六进制字符的输出的小写字符数组*/privatestaticfinalchar[]DIGITS_LOWER={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};/***用于建立十六进制字符的输出的大写字符数组*/privatestaticfinalchar[]DIGITS_UPPER={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};/***将字节数组转换为十六进制字符数组**@paramdata*byte[]*@return十六进制char[]*/publicstaticchar[]encodeHex(byte[]data){returnencodeHex(data,true);}/***将字节数组转换为十六进制字符数组**@paramdata*byte[]*@paramtoLowerCase*<code>true</code>传换成小写格式,<code>false</code>传换成大写格式*@return十六进制char[]*/publicstaticchar[]encodeHex(byte[]data,booleantoLowerCase){returnencodeHex(data,toLowerCase?DIGITS_LOWER:DIGITS_UPPER);}/***将字节数组转换为十六进制字符数组**@paramdata*byte[]*@paramtoDigits*用于控制输出的char[]*@return十六进制char[]*/protectedstaticchar[]encodeHex(byte[]data,char[]toDigits){intl=data.length;char[]out=newchar[l<<1];//twocharactersformthehexvalue.for(inti=0,j=0;i<l;i++){out[j++]=toDigits[(0xF0&data[i])>>>4];out[j++]=toDigits[0x0F&data[i]];}returnout;}/***将字节数组转换为十六进制字符串**@paramdata*byte[]*@return十六进制String*/publicstaticStringencodeHexStr(byte[]data){returnencodeHexStr(data,true);}/***将字节数组转换为十六进制字符串**@paramdata*byte[]*@paramtoLowerCase*<code>true</code>传换成小写格式,<code>false</code>传换成大写格式*@return十六进制String*/publicstaticStringencodeHexStr(byte[]data,booleantoLowerCase){returnencodeHexStr(data,toLowerCase?DIGITS_LOWER:DIGITS_UPPER);}/***将字节数组转换为十六进制字符串**@paramdata*byte[]*@paramtoDigits*用于控制输出的char[]*@return十六进制String*/protectedstaticStringencodeHexStr(byte[]data,char[]toDigits){returnnewString(encodeHex(data,toDigits));}/***将十六进制字符数组转换为字节数组**@paramdata*十六进制char[]*@returnbyte[]*@throwsRuntimeException*如果源十六进制字符数组是一个奇怪的长度,将抛出运行时异常*/publicstaticbyte[]decodeHex(char[]data){intlen=data.length;if((len&0x01)!=0){thrownewRuntimeException("Oddnumberofcharacters.");}byte[]out=newbyte[len>>1];//twocharactersformthehexvalue.for(inti=0,j=0;j<len;i++){intf=toDigit(data[j],j)<<4;j++;f=f|toDigit(data[j],j);j++;out[i]=(byte)(f&0xFF);}returnout;}/***将十六进制字符转换成一个整数**@paramch*十六进制char*@paramindex*十六进制字符在字符数组中的位置*@return一个整数*@throwsRuntimeException*当ch不是一个合法的十六进制字符时,抛出运行时异常*/protectedstaticinttoDigit(charch,intindex){intdigit=Character.digit(ch,16);if(digit==-1){thrownewRuntimeException("Illegalhexadecimalcharacter"+ch+"atindex"+index);}returndigit;}publicstaticvoidmain(String[]args){StringsrcStr="待转换字符串";StringencodeStr=encodeHexStr(srcStr.getBytes());StringdecodeStr=newString(decodeHex(encodeStr.toCharArray()));System.out.println("转换前:"+srcStr);System.out.println("转换后:"+encodeStr);System.out.println("还原后:"+decodeStr);}}

/blog/aub-1129228

参考mons.codec.binary.Hex

下载地址:/codec/download_codec.cgi

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。