我做了一个小项目,将十六进制字符串转换为ASCII字符串。当我转换te值时,我将其发送给客户端。但是我的客户没有核对价值。
我搜索了原因,然后发现当我将ASCII字符串转换回十六进制时,我又得到了一点差值..所以我认为当我发送数据时出现了问题..但我没有没有办法解决我的问题..
我还尝试先将十六进制转换为dec,然后转换为ascii,我也尝试了更多的菜鸟,请仅发送一个带有以下命令的命令:
char p = 3;
char d = 4;
bw3.write(p + "" + c + "");
这就是我现在得到的代码:
ServerSocket welcomeSocket2 = new ServerSocket(9999);
Socket socket2 = welcomeSocket2.accept();
OutputStream os3 = socket2.getOutputStream();
OutputStreamWriter osw3 = new OutputStreamWriter(os3);
BufferedWriter bw3 = new BufferedWriter(osw3);
String hex4 = "00383700177a0102081c4200000000000001a999c338030201000a080000000000000000184802000007080444544235508001000002080104";
StringBuilder output4 = new StringBuilder();
for (int i =0; i< hex4.length(); i +=2){
String str4 = hex4.substring(i, i+2);
int outputdecimal = Integer.parseInt(str4,16);
char hexchar = (char)outputdecimal;
System.out.println(str4);
output4.append(hexchar);
}
bw3.write(output4.toString());
bw3.flush();
我还注意到,当我发送只有4个字节长或10个字节的命令时,一切都很好。我收到的转换后的ASCII代码很好。我现在想发送的命令长58个字节。
答案 0 :(得分:0)
ASCII无法代表十六进制表示的所有可能数据。
因此,只要您尝试将六进制转换为ASCII,您尝试的任何方法都将无效。
您的十六进制包含纯二进制,计算机不透明的数据。 ASCII是用来表示文本的内容。有些二进制数据由ASCII组成,因此可以用ASCII表示。除这些数据外,还有其他所有数据。当您尝试将十六进制转换为ASCII时,这些将始终以错误结尾。这仅仅是因为ASCII通过其确切含义就无法做到这一点。