首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >十六进制到字符串中文,中文十六进制2字节,英文十六进制1字节?

问十六进制到字符串中文,中文十六进制2字节,英文十六进制1字节?
EN

Stack Overflow用户
提问于 2015-06-17 08:55:14
回答 1查看 1.2K关注 0票数 0

我是stringToHexAsciiString。

代码语言:javascript
复制
//将字符串转成ASCII十六进制的java方法
    public static String stringToHexAsciiString(String value)  
    {  
        StringBuffer sbu = new StringBuffer();  
        char[] chars = value.toCharArray();   
        for (int i = 0; i < chars.length; i++) 
        {  
            sbu.append(Integer.toHexString(chars[i]));
        }  
        return sbu.toString();  
    }  

这是asciiToString begin

代码语言:javascript
复制
//将ASCII转成字符串的java方法
    public static String asciiToString(String value)
    {
        StringBuffer sbu = new StringBuffer();  
        //System.out.println("value.length()/2 = " + value.length()/2);
        byte[] chars    = new byte[value.length()/2];
        chars           = hexStringToByte(value);
        //System.out.println("chars.length = " + chars.length);
        for(int i=0; i<chars.length; i++){
            //sbu.append((char) Integer.parseInt(chars[i]));
            byte[] change = new byte[1];
            change[0]     = chars[i];
            //System.out.println("change[0] = " + change[0]);
            sbu.append((char) chars[i]);
            //System.out.println("i = " + i + " " + sbu.toString());
        }


        return sbu.toString();
    }  
    public static byte[] hexStringToByte(String hexString){
        if (hexString == null || hexString.equals("")) {
            return null;
        }
        hexString = hexString.toUpperCase();
        int length = hexString.length() / 2;
        char[] hexChars = hexString.toCharArray();
        byte[] d = new byte[length];
        for (int i = 0; i < length; i++) {
            int pos = i * 2;
            d[i] = (byte) (charToByte(hexChars[pos]) << 4 |charToByte(hexChars[pos + 1]));
//          d[i] = (byte) (hexChars[pos] << 4 |hexChars[pos + 1]);
        }
        return d;
    }
    private static byte charToByte(char c) {
        return (byte) "0123456789ABCDEF".indexOf(c);
    }

使用测试英语是可以的,汉语是不好的。

代码语言:javascript
复制
String strAscii = Encrypter.stringToHexAsciiString("汉1232").trim();
            String asciiStr = Encrypter.asciiToString("6c4931323332".toUpperCase());
            System.out.println("asciiStr:"+asciiStr);
            System.out.println("strAscii:"+strAscii);

asciiToString结果是中文变成乱码

代码语言:javascript
复制
asciiStr:lI1232
strAscii:6c4931323332

需要汉1232.1232.stringToHexAsciiString结果:中文字符为2字节,英文为1字节.如何区分中文和英文的六六环。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-17 09:53:16

我不知道你的代码有什么问题.或者你到底想要什么,这在你的问题上还不清楚。但是,如果您只想将字符串转换为十六进制格式,则可以尝试以下代码:

代码语言:javascript
复制
import org.apache.commons.codec.binary.Hex;

public class StringToAscii
{
    public static void main( String[] args ) 
    {
        try {
            String s = "汉1232";
            System.out.println(s);
            String hexString = new String(Hex.encodeHexString(s.getBytes("UTF-8")));
            System.out.println(hexString);
            String unicode = new String(Hex.decodeHex(hexString.toCharArray()));
            System.out.println(unicode);
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

我的笔记本电脑的输出是:

代码语言:javascript
复制
汉1232
e6b18931323332
汉1232
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30886792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档