来自十六进制数组的Java初始化字符串

问题描述:

是否可以从一个十六进制数组(例如C风格)初始化String?来自十六进制数组的Java初始化字符串

unsigned char[] charArray = {0x41, 0x42, 0x43}; 

为什么不能做这样的事情?

String charArray = new String((byte[]) {0x41, 0x42, 0x43}); 

这是完全可能的,你可以用几种方法做到这一点。

  • 使用Unicode转义:

    String string = "\u0041\u0042\u0043"; 
    
  • 创建和使用的字节数组:

    String string = new String(new byte[] {(byte) 0x41, (byte) 0x42, (byte) 0x43}); 
    

,你必须牢记的是,该字符串不是一个一些东西的数组,它是一个单独的对象。因此它应该被创建为一个字符串文字,或者与其中一个构造函数一起创建。

+0

谢谢,这正是我一直在寻找的! – user1019710 2012-03-08 21:08:20

有没有无符号类型的Java,所以你的数组必须包含定期char值。但是,数字文字默认为int,因此您可能需要将值转换为char,如下所示:(char)0x41byte值也一样(根据您的数字是ASCII还是Unicode BMP值,使用其中一个或另一个)。您也可以使用unicode转义,如String str = "\u0041\u0042";。要获取ASCII(或其他编码)字符串的字节表示形式(相反的操作),请使用以下语法:String charArray = "abcd".getBytes("UTF-8");

另外,请注意字节和字符之间的区别。一个字符由Unicode标准定义,并且具有相同的含义。一个字节的含义取决于所使用的字符编码,所以你不能只用字节来创建一个字符串。如果使用String(byte[])构造函数,则隐式使用平台的默认编码 - 在某些情况下,这可能有风险。另一方面,如果通过将十六进制数字转换为char来生成char值,则实际上是从ASCII手动转换的。

问题不在于String,它与Java数组有关,特别是字节。

你可以做

String charArray = new String(new byte[] {(byte) 0x41, (byte) 0x42, 
    (byte) 0x43}); 

,或者甚至更好,你可以只写字符串字面与ASCII转义等。

"\u0041\u0042\u0043"