Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
4 / 4 / 3
Регистрация: 07.02.2013
Сообщений: 54
1

Byte array to string

11.07.2015, 11:25. Показов 3030. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Имеется девайс: U-Prox-Keypad
Задача: считать с клавиатуры символы 0-9 и *, и # и вывести в консоли соответственно (* и # видимо выводятся другими символами)

Подключено все через COMport.

Код подключения к ком порту и вывод сообщения в консоль:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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 (капитан очевидность, это я)
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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



что делать?)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.07.2015, 11:25
Ответы с готовыми решениями:

Конвертация из string в byte array
Добрых времени суток. Задача такова, спарсить текст и перевести его в массив байт. Казалось бы все...

Конвертирование HEX array в BYTE array
Собственно сабж. Накопипастил. И слепил это. Скажите а можно лаконичнее? //Художественный...

Struct to byte array
Есть вот такая вот структура private struct ipcam_command_t { public...

AES128 c Byte array
Добрый день ! Нужна реализация AES 128 с массивом байт , а не со строкой . ...

4
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
11.07.2015, 12:20 2
Kuzyavka,
А в чем собственно проблема?
Значения просто дублируются, а для двух знаков можно if написать
0
4 / 4 / 3
Регистрация: 07.02.2013
Сообщений: 54
11.07.2015, 19:10  [ТС] 3
Прошу прощения, не совсем детально описал проблему... Сам ридер читает чипованные карты, в которых находится 10-изначный код типа (цифры/буквы), то есть мне нужно читать, как цифры с клавиатуры, что можно решить двумя if и значения чипа.

должен получить к примеру 530020f9d1
а получаю:
Кликните здесь для просмотра всего текста

Byte array to string

0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
11.07.2015, 19:24 4
Kuzyavka,
Попробуйте смещать алфавит, видимо выкинули спецсимволы и вплотную расположили к цифрам его
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.07.2015, 19:31 5
Лучший ответ Сообщение было отмечено Kuzyavka как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
    }
1
11.07.2015, 19:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2015, 19:31
Помогаю со студенческими работами здесь

Byte array to struct
Имеется структура например public struct Sphere { public Vector location; ...

byte array занести строку
Добрый день всем. Нутром чую что это сделать легко, но не пойму как правельно. Есть массив байт...

String to byte[]
В диалоговом окне входные данные: ab1c4a67 . Нужно сохранить значения в таком массиве byte bytes =...

String to byte[]
Как string str = &quot;00 00 00 3F 00 00 00 00 00 00 00 00 00 80 66 C0&quot; Преобразовать в: byte arr =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru