Byte array to string - C#
Формулировка задачи:
Добрый день!
Имеется девайс: U-Prox-Keypad
Задача: считать с клавиатуры символы 0-9 и *, и # и вывести в консоли соответственно (* и # видимо выводятся другими символами)
Подключено все через COMport.
Код подключения к ком порту и вывод сообщения в консоль:
Код main (капитан очевидность, это я)
Нажимая на цифры:
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 и %;; )
что делать?)
Листинг программы
- 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;
- }
- }
- }
- }
Листинг программы
- 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;
- }
- }
- }
- }
Решение задачи: «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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д