代码之家  ›  专栏  ›  技术社区  ›  KingFish

将32字节数组转换为32位字符串

  •  1
  • KingFish  · 技术社区  · 8 年前

    我有以下代码。我有一个32长度的字符串,它被转换成一个字节数组。问题是我需要将其转换为32长度的字符串。问题是,它将返回64长度的字符串。有什么魔法我应该看看吗?

    class Go {
    
        public void run() {
            String testString = "12345678901234567890123456789012";
    
            byte[] bytesData = testString.getBytes();
            StringBuilder st = new StringBuilder();
    
            for (byte b : bytesData) {
                st.append(String.format("%2d", b));
            }
    
            System.out.println(st.toString());
        }
    
    
        public static void main(String[] v2) {
            Go v = new Go();
            v.run();
        }
    }
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   mypetlion    8 年前

    @阿兹罗给了你正确的答案,但为了教育,我会指出你做错了什么。当你得到 byte 价值 char 在字符串中,您得到的是ascii值。所以当你使用 String.format("%2d", b) ,你得到了 int 价值 本身,而不是 烧焦 它所代表的。相反,您可以将循环更改为以下内容:

        for (byte b : bytesData) {
            st.append( (char)b );
        }
    

    不过,还是要用“阿兹罗”说的话。我只是在解释,如果你对幕后的工作感兴趣,你可以怎么做。

        2
  •  2
  •   azro    8 年前

    你用这个 String 施工单位: public String(byte[] bytes) ( Oracle Doc )

    String testString = "12345678901234567890123456789012";
    System.out.println(testString);                          //12345678901234567890123456789012
    
    byte[] bytesData = testString.getBytes();
    
    String res = new String(bytesData);
    System.out.println(res);                                 //12345678901234567890123456789012