Android字符串和十六进制相互转化出现的中文乱码问题
废话不读说了,直接给大家贴代码了,代码附有注释,可以说明一切,本文写的不好,还请见谅。
importjava.io.ByteArrayOutputStream; /** *CreatedbyAdministratoron2016/2/2. *-----------16进制和字符串互转--------- *------------解决中文乱码问题--------- */ publicclassStringToSixthUtils{ privatestaticStringhexString="0123456789abcdef"; /* *将字符串编码成16进制数字,适用于所有字符(包括中文) */ publicstaticStringencode(Stringstr){ //根据默认编码获取字节数组 byte[]bytes=str.getBytes(); StringBuildersb=newStringBuilder(bytes.length*2); //将字节数组中每个字节拆解成2位16进制整数 for(inti=0;i<bytes.length;i++){ sb.append(hexString.charAt((bytes[i]&0xf0)>>4)); sb.append(hexString.charAt((bytes[i]&0x0f))); } returnsb.toString(); } /* *将16进制数字解码成字符串,适用于所有字符(包括中文) */ publicstaticStringdecode(Stringbytes){ ByteArrayOutputStreambaos=newByteArrayOutputStream(bytes.length()/2); //将每2位16进制整数组装成一个字节 for(inti=0;i<bytes.length();i+=2) baos.write((hexString.indexOf(bytes.charAt(i))<<4|hexString.indexOf(bytes.charAt(i+1)))); returnnewString(baos.toByteArray()); } }
下面给大家分享一段代码关于16进制字符串和字节数组互相转换
packagecom.wpn.net.util; publicclassNumberChange{ /* *把16进制字符串转换成字节数组@paramhex@return */ publicstaticbyte[]hexStringToByte(Stringhex){ intlen=(hex.length()/2); byte[]result=newbyte[len]; char[]achar=hex.toCharArray(); for(inti=0;i<len;i++){ intpos=i*2; result[i]=(byte)(toByte(achar[pos])<<4|toByte(achar[pos+1])); } returnresult; } privatestaticbytetoByte(charc){ byteb=(byte)"0123456789ABCDEF".indexOf(c); returnb; } /** *把字节数组转换成16进制字符串 * *@parambArray *@return */ publicstaticfinalStringbytesToHexString(byte[]bArray){ StringBuffersb=newStringBuffer(bArray.length); StringsTemp; for(inti=0;i<bArray.length;i++){ sTemp=Integer.toHexString(0xFF&bArray[i]); if(sTemp.length()<2) sb.append(0); sb.append(sTemp.toUpperCase()); } returnsb.toString(); } /** *@函数功能:BCD码转为10进制串(阿拉伯数据) *@输入参数:BCD码 *@输出结果:10进制串 */ publicstaticStringbcd2Str(byte[]bytes){ StringBuffertemp=newStringBuffer(bytes.length*2); for(inti=0;i<bytes.length;i++){ temp.append((byte)((bytes[i]&0xf0)>>>4)); temp.append((byte)(bytes[i]&0x0f)); } returntemp.toString().substring(0,1).equalsIgnoreCase("0")?temp.toString().substring(1):temp.toString(); } /** *@函数功能:10进制串转为BCD码 *@输入参数:10进制串 *@输出结果:BCD码 */ publicstaticbyte[]str2Bcd(Stringasc){ intlen=asc.length(); intmod=len%2; if(mod!=0){ asc="0"+asc; len=asc.length(); } byteabt[]=newbyte[len]; if(len>=2){ len=len/2; } bytebbt[]=newbyte[len]; abt=asc.getBytes(); intj,k; for(intp=0;p<asc.length()/2;p++){ if((abt[2*p]>='0')&&(abt[2*p]<='9')){ j=abt[2*p]-'0'; }elseif((abt[2*p]>='a')&&(abt[2*p]<='z')){ j=abt[2*p]-'a'+0x0a; }else{ j=abt[2*p]-'A'+0x0a; } if((abt[2*p+1]>='0')&&(abt[2*p+1]<='9')){ k=abt[2*p+1]-'0'; }elseif((abt[2*p+1]>='a')&&(abt[2*p+1]<='z')){ k=abt[2*p+1]-'a'+0x0a; }else{ k=abt[2*p+1]-'A'+0x0a; } inta=(j<<4)+k; byteb=(byte)a; bbt[p]=b; } returnbbt; } publicstaticvoidmain(String[]arg){ /** *68656C6C6F0A *C4E3BAC3 */ String[]str={"C4","E3","BA","C3"}; //String[]str={"7E","02","04","00","07","10","00","00","00","00","13","08","4F","01","0B","0B","15","10","14","13","44","7E"}; byte[]b=newbyte[str.length]; for(inti=0;i<str.length;i++){ b[i]=hexStringToByte(str[i])[0]; } System.out.println(newString(b)); StringstrC="你好"; Stringbth=bytesToHexString(strC.getBytes()); System.out.println(bth); System.out.println(Short.MAX_VALUE); System.out.println(Integer.toBinaryString(280)); } }
以上所述是本文给大家分享的Android字符串和十六进制相互转化出现的中文乱码问题的相关内容,希望对大家有所帮助。