Java十六进制velue转换为ascii并返回十六进制出错

Java十六进制velue转换为ascii并返回十六进制出错,java,char,hex,ascii,Java,Char,Hex,Ascii,我做了一个小项目,将十六进制字符串转换成ASCII字符串。当我转换te值时,我会将其发送给客户机。但我的客户没有重新确认价值 我搜索了原因,发现当我将ASCII字符串转换回十六进制时,我得到了一个稍微不同的值。。所以我认为我发送数据时出了问题。。但是我不知道如何解决我的问题 我还尝试先将十六进制转换为dec,然后再转换为ascii,我还尝试了更多noob whay,只需发送一个命令,例如: char p = 3; char d = 4; bw3.write(p + "" + c + "");

我做了一个小项目,将十六进制字符串转换成ASCII字符串。当我转换te值时,我会将其发送给客户机。但我的客户没有重新确认价值

我搜索了原因,发现当我将ASCII字符串转换回十六进制时,我得到了一个稍微不同的值。。所以我认为我发送数据时出了问题。。但是我不知道如何解决我的问题

我还尝试先将十六进制转换为dec,然后再转换为ascii,我还尝试了更多noob whay,只需发送一个命令,例如:

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();
ServerSocket-welcomeSocket2=新的ServerSocket(9999);
套接字socket2=welcomeSocket2.accept();
OutputStream os3=socket2.getOutputStream();
OutputStreamWriter osw3=新的OutputStreamWriter(os3);
BufferedWriter bw3=新的BufferedWriter(osw3);
字符串hex4=“00383700177A0102081C4200000000000001A999C338030201000A08000000000000001848020000007080444544235508001000002080104”;
StringBuilder output4=新的StringBuilder();
对于(int i=0;i

我还注意到,当我发送一个只有4字节或10字节长的命令时,一切都很顺利。我收到了转换好的ascii码。我现在想要发送的命令长度为58字节。

ASCII无法表示所有可能的十六进制数据

因此,只要您尝试将hexa转换为ASCII,您尝试的任何操作都不会起作用


您的十六进制包含纯二进制的计算机不透明数据。ASCII是用来表示文本的。有些二进制数据是由ASCII码组成的,因此可以用ASCII码表示。除此之外还有其他的数据。当您尝试将十六进制转换为ASCII时,这些结果总是错误的。这仅仅是因为根据ASCII本身的定义,ASCII无法做到这一点。

但是,如果我只发送10字节长的值,那么一切正常,这是为什么?因为你们对我说,若我把十六进制转换成ascii,我什么都不做,但其他较小的命令也行,我也试过十进制转换成ascii,通常你们可以在那个里转换0-255ascii@metalgastje因为您碰巧选择了完全由ASCII组成的10字节长的数据块。当这些事情发生时,ASCII在计算机中无处不在。但是,ASCII并不是所有数据的组成部分,因此您必须经常在它不起作用的情况下运行。好的,但我拥有的十六进制字符串可以转换为ASCII,00-ASCII 00,38-->8,所以我不明白为什么他在我从ASCII转换回十六进制时做得不好,而且,如果ASCII不起作用,我输入了最多的数据?是十六进制字符串吗,就是放在变量hex4中的那个?因为它无法转换为ASCII。它包含字节a9、值169、字节99、值153、字节c3、值195和字节80、值128。所有这些都与ASCII不兼容,ASCII为值0到127定义字符,其他什么都不定义?到255