Java 字符串,byte[],16进制的字符串互转

Java 字符串,byte[],16进制的字符串互转

学习笔记 2010-11-26 11:26:45 阅读146 评论0  字号: 订阅

转: http://doggou.javaeye.com/blog/213771

 /** 

     * 字符串转换成十六进制字符串

     */  

    plic static String str2HexStr(String str) {  

        char[] chars = "0123456789ABCDEF".toCharArray();  

        StringBuilder sb = new StringBuilder("");

        byte[] bs = str.getBytes();  

        int bit;  

        for (int i = 0; i < bs.length; i++) {  

            bit = (bs[i] & 0x0f0) >> 4;  

            sb.append(chars[bit]);  

            bit = bs[i] & 0x0f;  

            sb.append(chars[bit]);  

        }  

        return sb.toString();  

    }  

 

    /** 

     * 十六进制转换字符串 

     */  

    plic static String hexStr2Str(String hexStr) {  

        String str = "0123456789ABCDEF";  

        char[] hexs = hexStr.toCharArray();  

        byte[] bytes = new byte[hexStr.length() / 2];  

        int n;  

        for (int i = 0; i < bytes.length; i++) {  

            n = str.indexOf(hexs[2 * i]) * 16;  

            n += str.indexOf(hexs[2 * i + 1]);  

            bytes[i] = (byte) (n & 0xff);  

        }  

        return new String(bytes);  

    }

 

 

    /**
     * bytes转换成十六进制字符串
     */
    plic static String byte2HexStr(byte[] b) {
        String hs="";
        String stmp="";
        for (int n=0;n<b.length;n++) {
            stmp=(Integer.toHexString(b[n] & 0XFF));
            if (stmp.length()==1) hs=hs+"0"+stmp;
            else hs=hs+stmp;
            //if (n<b.length-1)  hs=hs+":";
        }
        return hs.toUpperCase();
    }
    
    private static byte uniteBytes(String src0, String src1) {
        byte b0 = Byte.decode("0x" + src0).byteVal();
        b0 = (byte) (b0 << 4);
        byte b1 = Byte.decode("0x" + src1).byteVal();
        byte ret = (byte) (b0 | b1);
        return ret;
    }
    
    /**
     * bytes转换成十六进制字符串
     */
    plic static byte[] hexStr2Bytes(String src) {
        int m=0,n=0;
        int l=src.length()/2;
        System.out.println(l);
        byte[] ret = new byte[l];
        for (int i = 0; i < l; i++) {
            m=i*2+1;
            n=m+1;
            ret[i] = uniteBytes(src.sstring(i*2, m),src.sstring(m,n));
        }
        return ret;
    }

 

 

 

/**
     *String的字符串转换成unicode的String
     */
    plic static String stringToUnicode(String strText) throws Exception {
        char c;
        String strRet = "";
        int intAsc;
        String strHex;
        for (int i = 0; i < strText.length(); i++) {
            c = strText.charAt(i);
            intAsc = (int) c;
            strHex = Integer.toHexString(intAsc);
            if (intAsc > 128) {
                strRet += "//u" + strHex;
            } else {
                // 低位在前面补00
                strRet += "//" + strHex;
            }
        }
        return strRet;
    }
    /**
     *unicode的String转换成String的字符串
     */
    plic static String unicodeToString(String hex) {
        int t = hex.length() / 6;
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < t; i++) {
            String s = hex.sstring(i * 6, (i + 1) * 6);
            // 高位需要补上00再转
            String s1 = s.sstring(2, 4) + "00";
            // 低位直接转
            String s2 = s.sstring(4);
            // 将16进制的string转为int
            int n = Integer.valOf(s1, 16) + Integer.valOf(s2, 16);
            // 将int转换为字符
            char[] chars = Character.toChars(n);
            str.append(new String(chars));
        }
        return str.toString();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值