将一组字符串转换为byte []数组

时间:2010-01-13 14:41:26

标签: java string bytearray byte

我想将一组字符串转换为byte []数组。首先,我做了类似的事情,将字节数组转换为字符串:

public String convertByte(byte[] msg) {
    String str = "";        
    for(int i = 0; i < msg.length; i++) {
        str += (msg[i] + " * ");
    }       
    return str;
}

当我尝试转换回byte []数组时,我得到的值与转换为String时的值不同。我最初有些东西给了我不正确的价值。

我目前正在尝试以下方面:

public static byte[] convertStr(String ln)
{
    System.out.println(ln);

    String[] st = ln.split(" * ");
    byte[] byteArray = new byte[23];
    for(int i = 0; i < st.length; i++)
    {
        byteArray[i] = st[i].get byte value or something;
    }

    return byteArray;
}

如果我尝试使用String api中的getbytes()方法,它返回一个字节数组而不是一个字节,这是我的问题。

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:2)

这应该有效:

byte[] bytes = "Hello World".getBytes("UTF-8");
String hello = new String(bytes, "UTF-8");

以上示例使用UTF-8编码,仅作为示例。在消息输入中使用您期望的字符编码。(这个'答案'不是问题的答案......)

修改

所以我们需要从byte []到String再转换回byte []。 me123在值之间(和前面)添加了分隔符。正如其他人已经解释过 1.分割的正则表达式必须为" \\* "和 2.魔术方法是Byte.parseByte(st[i])

这是一种替代方法,不使用分隔符,而是修复字节条目的宽度。 StringToByte转换器显示了一个基于字符串char数组的快速解决方案。

public static String convertByte(byte[] msg) {
    StringBuilder sb = new StringBuilder();
    for (byte b:msg) {
        sb.append(String.format("%02x", b));
    }
    return sb.toString();
}

public static byte[] convertStr(String ln)
{
    System.out.println(ln);
    char[] chars = ln.toCharArray();
    byte[] result = new byte[ln.length()/2];
    for (int i = 0;i < result.length; i++) {
        result[i] = (byte) hexToInt(chars[2*i], chars[2*i+1]);
    }

    return result;
}

private static int hexToInt(char c1, char c2) { 
    return ((c1 <= '9' ? c1 - '0':c1 - 'a'+10) << 4) 
           + (c2 <= '9' ? c2 - '0':c2 - 'a'+10);
}

答案 1 :(得分:2)

使用Byte.parseByte可能有助于您的第二个代码段工作。

但是,除非你有一些特定的理由使用这种表示,否则我会使用其他答案中提到的Java方法将字符串编码为字节数组。

public static byte[] convertStr(String ln)
{
    System.out.println(ln);

    String[] st = ln.split(" * ");
    byte[] byteArray = new byte[23];
    for(int i = 0; i < st.length; i++)
    {
        byteArray[i] = Byte.parseByte(st[i]);
    }

    return byteArray;
}

答案 2 :(得分:0)

我不明白你为什么要尝试按字符获取这些字节。 getBytes()及其变体将立即为整个字符串提供byte []数组。 但是,如果你想看看字符是如何编码的,那么你的方法很好,但你必须记住,一个字符可以编码在例如在某些编码中有一到四个字节,因此每个字符都需要一个字节数组。

答案 3 :(得分:0)

如果您确定String足够小以适合一个字节,那么您可以

st[i].getBytes()[0];

然而,在大多数情况下,你的String可能会更大,所以在这些情况下它是不可能的......

答案 4 :(得分:0)

如果您确定该字符串包含1个字节,则可以执行以下操作:

byteArray[i] = st[i].getbytes()[0];

答案 5 :(得分:0)

hexToInt应该是这样的

private static int hexToInt(char c1, char c2) {
    return (Character.digit(c1, 16) << 4) + Character.digit(c2, 16);
}

否则CA在字节中返回AA。