public static void main(String[]args){
Scanner sc=new Scanner(System.in);
String s=sc.next();
f(s);
//f1();
}
public static void f(String s){
char[] ch=s.toCharArray();
System.out.println("   **"+ch.length);
int[] n=new int[ch.length];
Integer[] inte=new Integer[n.length];
String[] str=new String[n.length];
for(int i=0;i<n.length;i++){
n[i]=ch[i];
str[i]=Integer.toString(n[i],16);
System.out.print(str[i]+" ");
}
System.out.println();
for(int i=0;i<str.length;i++){
inte[i]=Integer.valueOf(str[i],16);
int result=inte[i].intValue();
char c=(char)result;
System.out.print(c);
}
运行结果  

   **5
73 68 65 6e 6df1 
为什么会得到一个这样的结果????

解决方案 »

  1.   

    n[i]=ch[i];会把字符(ch[i])的ASCII码赋值给n[i],比如a的ASCII码为97,int的值就是为97。
    str[i]=Integer.toString(n[i],16);会把int的值变成16进制的形式然后转换成字符串。就得到上面的结果了。
      

  2.   

    字符的序列化与反序列化,unicode码
    public static void main(String[]args){
    Scanner sc=new Scanner(System.in);
    String s=sc.next();
    f(s);
    //f1();
    }
    public static void f(String s){
    char[] ch=s.toCharArray();//字符串s按unicode编码转换成字符数组ch,长度等于字符串s长度
    System.out.println("   **"+ch.length);//打印字符数组长度
    int[] n=new int[ch.length];
    Integer[] inte=new Integer[n.length];
    String[] str=new String[n.length];
    for(int i=0;i<n.length;i++){
    n[i]=ch[i];//char型ch[i]自动转型为int型,赋值给n[i]
    str[i]=Integer.toString(n[i],16);//调用整形包装类Integer的静态方法,将int型n[i]按16进制转换为字符串
    System.out.print(str[i]+" ");//打印
    }
    System.out.println();
    for(int i=0;i<str.length;i++){
    inte[i]=Integer.valueOf(str[i],16);//调用整形包装类Integer的静态方法,将字符串(16进制数字显示的字符串)转换为Integer(int型包装类)
    int result=inte[i].intValue();//Integer to int
    char c=(char)result;//int型按unicode编码转换成字符(反序列化)
    System.out.print(c);
    }