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);
}