Byte array to string - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Имеется девайс: U-Prox-Keypad Задача: считать с клавиатуры символы 0-9 и *, и # и вывести в консоли соответственно (* и # видимо выводятся другими символами) Подключено все через COMport. Код подключения к ком порту и вывод сообщения в консоль:
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Text;
 
namespace Console_ComPort_iPR
{
    class iPR
    {
        #region Settings_port
        private string baudRate = string.Empty;
        private string stopBits = string.Empty;
        private string parity = string.Empty;
        private string portName = string.Empty;
        private string dataBits = string.Empty;
 
        private string _tbShowData;
        //init port
 
        private SerialPort comPort = new SerialPort();
        #endregion

        ///<sumary>
        /// iPR(string name)
        ///</sumary>
        public iPR(string name)
        {
 
            portName = name;
            //tbShowData = tb;
            //add event handler
            comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
        }
 
        [STAThread]
        public void DisplayData(string text)
        {
            //_tbShowData.Invoke(new EventHandler(delegate
            //{
            //    _tbShowData.AppendText(text);
            //}
            //    ));
            Console.WriteLine(text);
        }

        private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //string msg = comPort.ReadExisting();
            //retrieve number of bytes in the buffer
            int bytes = comPort.BytesToRead;
            //create a byte array to hold the awaiting data
            byte[] arr = new byte[bytes];
            //read the data and store it                    
            comPort.Read(arr, 0, bytes);
            //display the data to the user
            //byte array console write
            for (int i = 0; i < arr.Length; i++) 
                _tbShowData += " " + arr[i].ToString();
            DisplayData(_tbShowData);
            //array to string
            //_tbShowData = Encoding.UTF8.GetString(arr);
            _tbShowData = Encoding.GetEncoding("windows-1251").GetString(Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("windows-1251"), arr));
 
            DisplayData(_tbShowData);
            _tbShowData = string.Empty;
        }
 
        public bool OpenPort()
        {
            try
            {
                if (comPort.IsOpen) comPort.Close();
 
                comPort.BaudRate = 2400;
                comPort.StopBits = StopBits.One;
                comPort.Parity = Parity.None;
                comPort.PortName = portName;
                comPort.DataBits = 8;
 
                comPort.Open();
                return true;
            }
            catch (Exception exc)
            {
                DisplayData(exc.Message);
                return false;
            }
        }
    }
}
Код main (капитан очевидность, это я)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Console_ComPort_iPR
{
    class Program
    {
        static void Main(string[] args)
        {
            iPR comPort = new iPR("COM3");
            comPort.OpenPort();
 
            Console.WriteLine("input 'exit' to exit from app!");
            while (true)
            {
                if (Console.ReadLine() == "exit") break;
            }
        }
    }
}
Нажимая на цифры: 1 - получаю (37 49 49 13 и %11) 2 - получаю (37 50 50 13 и %22) 3 - получаю (37 51 51 13 и %33) * - получаю (37 58 58 13 и %:: ) # - получаю (37 59 59 13 и %;; )
что делать?)

Решение задачи: «Byte array to string»

textual
Листинг программы
class Program
{
    static void Main()
    {
        int[] nums = {35, 53, 51, 48, 48, 50, 48, 63, 57, 61, 49, 62, 13};
        string s = GetString(nums);
        Console.WriteLine(s);
 
    }
 
    private static string GetString(int[] nums)
    {
        char[] result = new char[nums.Length];
        for (int i = 0; i < result.Length; i++)
        {
            int x = nums[i] <= '9' ? 0 : 7;
            result[i] = (char) (nums[i] + x);
        }
        return new string(result);
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5