Отправить текст в виде двоичных данных из сокета - PullRequest
0 голосов
/ 13 июня 2018

У меня есть эмулятор устройства, который принимает данные в виде текста из сокета. Ниже код работает нормально, пока я не отправлю с 0x00 to 0x7F, что означает ограничение по Ascii (от 0 до 127).Проблема возникает, когда я пытаюсь отправить за пределы Ascii, например, 0x80,0x81.Он отправляет эмулятору 0x3F ('?') И меняет весь смысл команды.потому что он не может этого понять.

Итак, что может быть возможным решением для отправки данных за пределы Ascii

Код отправки данных:

 //string data = textBox1.Text;
 string d1 = ConvertHex("35");  //getting exact byte in socket             
 byte[] buffer = Encoding.ASCII.GetBytes(d1);
 clientStream.Write(buffer, 0, buffer.Length);
 clientStream.Flush();

Функция ConverHex:

public static string ConvertHex(String hexString)
    {
        try
        {
            string ascii = string.Empty;

            for (int i = 0; i < hexString.Length; i += 2)
            {
                String hs = string.Empty;

                hs = hexString.Substring(i, 2);
                uint decval = System.Convert.ToUInt32(hs, 16);
                char character = System.Convert.ToChar(decval);
                ascii += character;

            }

            return ascii;
        }
        catch (Exception ex) { Console.WriteLine(ex.Message); }

        return string.Empty;
    }

1 Ответ

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

, но когда я отправляю больше 79, я получаю 3F в эмуляторе.

7F фактически является верхней границей.Поскольку это 127 в десятичном виде, это самая высокая кодовая точка, поддерживаемая кодировкой ASCII.Точки кода выше, чем те, которые декодируются в знак вопроса, имеют кодовую точку 63 или 3F в шестнадцатеричном формате.

Это потому, что вы используете текст для передачи двоичных данных.Не делай этого.См. Как преобразовать шестнадцатеричную строку в байтовый массив? для правильной реализации "шестнадцатеричной строки в байтовый массив".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...