3 回答
TA贡献1757条经验 获得超8个赞
你不能只是获取返回的字符串并从中构造一个字符串...它不再是byte[]数据类型,它已经是一个字符串; 你需要解析它。例如 :
String response = "[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]"; // response from the Python script
String[] byteValues = response.substring(1, response.length() - 1).split(",");
byte[] bytes = new byte[byteValues.length];
for (int i=0, len=bytes.length; i<len; i++) {
bytes[i] = Byte.parseByte(byteValues[i].trim());
}
String str = new String(bytes);
** 编辑 **
你在问题中得到了一个问题的提示,你说“ Whatever I seem to try I end up getting a byte array which looks as follows... [91, 45, ...”,因为91是字节值[,所以[91, 45, ...是字符串“ [-45, 1, 16, ...”字符串的字节数组。
该方法Arrays.toString()将返回String指定数组的表示形式; 意味着返回的值不再是数组。例如 :
byte[] b1 = new byte[] {97, 98, 99};
String s1 = Arrays.toString(b1);
String s2 = new String(b1);
System.out.println(s1); // -> "[97, 98, 99]"
System.out.println(s2); // -> "abc";
如您所见,s1保持数组 的字符串表示形式b1,同时s2保存包含在其中的字节的字符串表示形式b1。
现在,在你的问题中,你的服务器返回一个类似于的字符串s1,因此要获得数组表示,你需要相反的构造函数方法。如果s2.getBytes()是相反的new String(b1),你需要找到相反的Arrays.toString(b1),因此我粘贴在这个答案的第一个片段中的代码
添加回答
举报