Java шестнадцатеричное velue преобразовать в ASCII и обратно в шестнадцатеричное происходит неправильно - PullRequest
0 голосов
/ 27 июня 2018

Я сделал небольшой проект, который преобразует шестнадцатеричную строку в строку ASCII. Когда я конвертирую значение, я отправляю его клиенту. Но мой клиент не пересмотрел значение.

Я искал почему и увидел, что когда я конвертирую строку 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();

Я также заметил, что когда я посылаю команду длиной всего 4 байта или 10, все идет хорошо. Я получил мой преобразованный код ASCII хорошо. Команда, которую я сейчас хочу отправить, имеет длину 58 байт.

1 Ответ

0 голосов
/ 27 июня 2018

ASCII не способен представить все возможные данные, выраженные в шестнадцатеричном формате.

Следовательно, до тех пор, пока вы будете пытаться конвертировать гекса в ASCII, все, что вы пытаетесь сделать, никогда не сработает.

Ваш шестнадцатеричный код содержит чисто двоичные компьютерные непрозрачные данные. ASCII - это то, что вы используете для представления текста. Есть некоторые двоичные данные, которые сделаны из ASCII и поэтому могут быть представлены в ASCII. И есть все другие данные, кроме этих. Они всегда будут неправильными, если вы попытаетесь преобразовать шестнадцатеричное в ASCII. Это просто потому, что ASCII предназначен быть неспособным сделать это, по самому определению, что это такое.

...