当前位置: 代码迷 >> J2SE >> 怎么将十六进制转换成字符串
  详细解决方案

怎么将十六进制转换成字符串

热度:212   发布时间:2016-04-24 12:11:32.0
如何将十六进制转换成字符串
帮我实现UltraEdit-32里面的HEX模式, 
  我这里举个例子:
进行十六进制转换 byte[] byte = {FF ,FA, 18 ,00 ,41 ,4E ,53 ,49 ,FF ,F0};
实现:
00000000 FF FA 18 00 41 4E 53 49 FF F0 ?...ANSI? (后面其实是乱码没有显示)
 

------解决方案--------------------
不是很明白LZ要求,给你一个参考(就你的EX)
Java code
public class hextostring {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        byte[] b = {(byte) 0xFF ,(byte)0xFA, 0x18 ,0x00 ,0x41 ,0x4E ,0x53 ,0x49 ,(byte)0xFF ,(byte)0xF0};        String s=new String();        try {            s=new String(b, "UTF-8");        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        System.out.printf("%08x ",0);        for(int i=0;i<b.length;i++)            System.out.printf("%02X ",b[i]);                System.out.println(s);            }}
------解决方案--------------------
没看清什么要求
------解决方案--------------------
看不得不是很懂..
------解决方案--------------------
准确点说,应该是:如何把字节数组转换成十六进制的整数
Java code
public class Convert {        /**     * 将字节数组编码成十六进制表示的字符串,每个字节用两个十六进制字符表示,不足两位     * 时在左边补0     * @param data 被编码的字节数组     * @param seperator 字节之间的分隔符     * @return 转换后的字符串     */    public static String toHexString(byte[] data, String seperator){        StringBuilder sb = new StringBuilder(data.length * (2 + seperator.length()));                int pb = 0;        String pre = "";        while(pb < data.length){            byte b = data[pb++];                        int h = ((0xF0 & b) >> 4);            int l = (0x0F & b);                        sb.append(pre);            if(h < 10){                sb.append((char)('0' + h));            }else{                sb.append((char)('a' + h - 10));            }            if(l < 10){                sb.append((char)('0' + l));            }else{                sb.append((char)('a' + l - 10));            }            pre = seperator;        }                return sb.toString();    }        /**     * 将十六进制字符串表示的字节数据还原成字节数组     * @param text 被还原的字符串     * @return 还原之后的字节数组     */    public static byte[] fromHexString(String text){        if(text == null)            return new byte[0];                byte[] result = new byte[text.length() / 2];                text = text.toLowerCase();        int pb = 0;        int ps = 0;        while(pb < result.length && ps < text.length()){            char ch = text.charAt(ps++);            char cl = text.charAt(ps++);                        int a = 0;            int b = 0;            if('0' <= ch && ch <= '9'){                a = ch - '0';            }else{                a = ch - 'a' + 10;            }            if('0' <= cl && cl <= '9'){                b = cl - '0';            }else{                b = cl - 'a' + 10;            }                        result[pb++] = (byte)((a << 4) + b);        }                return result;    }}
------解决方案--------------------
已测试的:
Java code
public class strtohex {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        String s="import方式可以改变Ecl111,This is a test!";//        String s="12345678901234567";        byte b[]=s.getBytes();        int i,j;        for( i=0;i<b.length/16;i++)        {            System.out.printf("%08x: ",i);            for(j=0;j<16;j++)            {                System.out.printf("%02X ", b[i*16+j]);                            }            String s1=null;            try {            s1=new String(b,"ISO8859-1");            s1=s1.substring(i*16,i*16+16);            s1=new String(s1.getBytes("ISO8859-1"),"GBK"); //linux:UTF-8        } catch (Exception e) {            e.printStackTrace();        }        System.out.print("; ");        System.out.println(s1);       }       int l=b.length;        if (l%16!=0)       {           System.out.printf("%08x: ",i);           for(j=i*16;j<l;j++)                System.out.printf("%02X ", b[j]);                           for(j=0;j<16-l%16;j++)               System.out.print("00 ");                               String s1=null;               try {               s1=new String(b,"ISO8859-1");               s1=s1.substring(i*16,i*16+l%16);               s1=new String(s1.getBytes("ISO8859-1"),"GBK"); //linux:UTF-8           } catch (Exception e) {               e.printStackTrace();           }           System.out.print("; ");           System.out.println(s1);          }       }    }
  相关解决方案