Java将字节数组的字符串转换为字节数组

时间:2017-06-08 10:34:11

标签: java arrays byte

我从ajax通过javascript发送了一个字节数组,如下所示:

"89,50,4e,47,0d,0a,1a,0a,00,00,00,0d,49,48,44,52,00,00,01,98,00,00,00,e4,08,06,00 ..."

我想将此字符串转换为字节数组。 与此问题非常相似,但使用的是Java:Convert String[] to byte[] array

编辑: 这似乎有效 - 但不确定我做得对吗

    String[] byteData ="89,50,4e,47,0d,0a,1a,0a,00,00,00,0d,49,48,44,52,00,00,01,98,00,00,00,e4,08,06,00";
    byte[] b = new byte[byteData.length];
    for (int i = 0; i < byteData.length; i++) {
        BigInteger bla = BigInteger.valueOf(Integer.parseInt(byteData[i].trim(), 16) - 128);
        b[i] = bla.toByteArray()[0];
    }

4 个答案:

答案 0 :(得分:0)

这是一个简单的JAVA解决方案:

        String bytes="89,50,4e,47,0d,0a,1a,0a,00,00,00,0d,49,48,44,52,00,00,01,98,00,00,00,e4,08";
        String []tab=bytes.split(",");
        Integer []b = new Integer[tab.length];
        for(int i = 0 ; i < tab.length ; i++){
             if(tab[i].matches("[-+]?\\d*\\.?\\d+"))
                 b[i]=Integer.parseInt(tab[i]);
             else
                 b[i]=Integer.parseInt(tab[i],16);


        }

答案 1 :(得分:0)

编辑:实际上,由于this,parseByte对您的案例似乎不是一个安全的选择,因此我从this answer获取灵感来改变它。

你可以这样做:

String bytesAsStringWithCommas = "89,50,4e,47,0d,0a,1a,0a,00,00,00,0d,49,48,44,52,00,00,01,98,00,00,00,e4,08,06,00 ...";
String[] bytesStr = bytesAsStringWithCommas.split(",");
byte[] byteArray = new byte[bytesStr.length];
for (int j = 0; j < bytesStr.length; j++) {
    byteArray[j] = (byte) ((Character.digit(bytesStr[j].charAt(0), 16) << 4) + Character.digit(bytesStr[j].charAt(1), 16));
}

您应该更改服务器代码或客户端代码以直接发送数据,而不是使用像这样的复杂解决方案。或者您也可以使用Base64编码,这将比您当前的解决方案更好。

答案 2 :(得分:0)

你可以试试这个

String response ="89,50,47,00,00,00,49,48,44,52,00,00,01,98,00,00,00,08";

List<Byte> byteList = Arrays.stream(response.split(","))
   .map(Byte::parseByte)
   .collect(Collectors.toList());

与之前相同但使用流xD

但是你的例子在4e,0d上抛出NumberFormatException等等

答案 3 :(得分:0)

尝试以下代码(输出是转换结果):

    String input = "89,50,4e,47,0d,0a,1a,0a,00,00,00,0d,49,48,44,52,00,00,01,98,00,00,00,e4,08";

    String[] hex = input.split(",");
    char[] chars = new char[hex.length];
    for (int i = 0; i < hex.length; i++) {
        chars[i] = (char) Integer.parseInt(hex[i], 16);
    }
    String output = new String(chars);