Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
1

Прочитать строку из буфера и преобразовать в int

24.01.2014, 16:36. Просмотров 3213. Ответов 48
Метки нет (Все метки)


Добрый день уважаемые профессионалы!
Есть буфер. Получены данные из ком порта.
в формате:
32 43 101 255 2 3 45 73 54 29 111

Как эти данные из строки преобразовать 1 байтовые числа и загнать в текстбокс?
Естественно пробелы игнорировать.
Что то уже голова пухнет.... со стороны микроконтроллера(МК) (он отправляет эти данные)
я решил на си (очень геморройно решил ) прочитал каждый символ , игнорировал пробелы, перевел в число
C
1
data[x] -= 48;
и сложил разряды
C
1
data[3] = data[0]*100 + data[1]*10 + data[2];
На c# в приложении пытаюсь делать так:
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
if(flags_write==2)
                           {
                             Port.Write("S"); //Writes "1" to the port, just for example
                             a=0;
                             for(x=3; x < buffer.Length; x++ ) 
                             {
                             
                                if(buffer[x] == ' ')
                                {
                                    x++;
                                }
                                else
                                {
                                    data_text[a++] = buffer[x];
                                }
                                
                             flags_write=0;
                           }
                           }
                             
                           textBox1.Text = Convert.ToString(data_text[0]);
                           textBox2.Text = Convert.ToString(data_text[1]);
                           textBox3.Text = Convert.ToString(data_text[2]);
                           textBox4.Text = Convert.ToString(data_text[3]);
                           textBox5.Text = Convert.ToString(data_text[4]);
                           textBox6.Text = Convert.ToString(data_text[5]);
                           textBox7.Text = Convert.ToString(data_text[6]);
                           textBox8.Text = Convert.ToString(data_text[7]);
                           textBox9.Text = Convert.ToString(data_text[8]);
                           textBox10.Text = Convert.ToString(data_text[9]);
                           textBox11.Text = Convert.ToString(data_text[10]);
Я могу сделать также как со стороны МК, но это оооочень долго. Есть способ проще?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2014, 16:36
Ответы с готовыми решениями:

Преобразовать строку в int
как из string преобразовать в int form2-&gt;label4-&gt;Text = s;

Преобразовать строку в int
Есть файл: 13 23 41 12 32 0 2 4

Как преобразовать long int в строку
Подскажите пожалуйста функцию преобразования long int в строку

Как преобразовать некорректную строку в int?
У меня есть некорректная строка, как её преобразовать в int?

48
656 / 526 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
24.01.2014, 17:00 2
C#
1
2
3
4
5
6
7
8
9
using System;
using System.Linq;
...
string data = "32 43 101 255 2 3 45 73 54 29 111";
byte[] arr = data
        .Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries )
        .Select( x => byte.Parse( x ) )
        .ToArray();
...
Так вы получите массив чисел, с название arr. А далее если вам нужно "загнать" в TextBox, то:
C#
1
textBox1.Text = string.Join( " ", arr );
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
24.01.2014, 17:05  [ТС] 3
Спасибо за быстрый ответ!
у меня 11 текст боксов, и в каждый текст бокс из массива должно попасть свое число
Ваш пример помог на 70%
0
656 / 526 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
24.01.2014, 17:07 4
Сейчас сделаю для 11 текстбоксов, только вы их пронумеруйте, tb_1, tb_2, ..., tb_11...
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
24.01.2014, 17:09  [ТС] 5
Ок, пронумерую
0
656 / 526 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
24.01.2014, 17:11 6
C#
1
2
3
4
5
6
7
8
string data = "32 43 101 255 2 3 45 73 54 29 111";
byte[] arr = data
    .Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries )
    .Select( x => byte.Parse( x ) )
    .ToArray();
 
    for ( int i = 0; i < arr.Length; i++ )
        this.Controls["tb_" + ( i + 1 )].Text = arr[i].ToString();
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
24.01.2014, 17:15  [ТС] 7
Спасибище огромное! Буду дома - попробую код.
Из пространств имен ничего не нужно подключать?
данные окажутся я так понял в "tb" x - где x номер после tb ? могу я подставить "textbox" ?
0
656 / 526 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
24.01.2014, 17:22 8
Цитата Сообщение от Artos5 Посмотреть сообщение
Из пространств имен ничего не нужно подключать?
C#
1
using System.Linq;
Цитата Сообщение от Artos5 Посмотреть сообщение
данные окажутся я так понял в "tb" x - где x номер после tb ? могу я подставить "textbox" ?
Да.
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
26.01.2014, 20:42  [ТС] 9
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
string data = "32 43 101 255 2 3 45 73 54 29 111";
byte[] arr = data
    .Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries )
    .Select( x => byte.Parse( x ) )
    .ToArray();
 
    for ( int i = 0; i < arr.Length; i++ )
        this.Controls["tb_" + ( i + 1 )].Text = arr[i].ToString();
Код не компилируется... ругается на эту строчку:

C#
1
.Select(x => byte.Parse(x))
0
Модератор
Эксперт .NET
5304 / 4100 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
26.01.2014, 21:33 10
Лучший ответ Сообщение было отмечено Artos5 как решение

Решение

А что Вы эти данные из порта сразу как байты не читаете и потом просто через перегруженный метод ToString() не выводите как надо? Я постоянно с портами работаю, так и делаю, читаю байты из порта а потом их уже как надо вывожу...
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
26.01.2014, 21:46  [ТС] 11
Не совсем понял... у меня есть string buffer . В него приходят данные из ком порта.
Мне нужно их обрабатывать и загонять в textbox-ы.

Добавлено через 7 минут
Кажись догнал... Вы имеете в виду , отправлять в порт байтами а не символами?

Добавлено через 28 секунд
если да - то так гораздо проще будет
0
Модератор
Эксперт .NET
5304 / 4100 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
26.01.2014, 21:52 12
И отправлять в порт, и принимать из порта именно байты. Так удобнее, на мой взгляд...
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
26.01.2014, 21:54  [ТС] 13
Гораздо удобнее!!!
Спасибо что мозги вправили

Добавлено через 31 секунду
Сейчас код со стороны МК переделаю, и попробую.
0
Модератор
Эксперт .NET
5304 / 4100 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
26.01.2014, 21:59 14
Я постоянно с байтами. Тем более когда обмен с портом смотрю, там все в hex, ну и я так же, организую типа байтового массива вида: byte[]={0xA4,0xEE,0xC7...} и гоню этот массив в порт.
И принимаю так же, цикл, проверка свойства BytesToRead порта и вылет из цикла, если свойство !=0 или по таймауту...
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
26.01.2014, 22:57  [ТС] 15
Да, в виде байтов легко передавать/принимать! Попробовал - работает!
Только 0 , я так понимаю, нельзя передать.
Буду значит добавлять к числу единицу.
0
Модератор
Эксперт .NET
5304 / 4100 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
26.01.2014, 23:02 16
Можно и 0. Там в свойствах порта посмотрите и отключите этот параметр, не помню, что-то типа игнорировать нулевые значения... И принимает 0, и передает отлично.
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
26.01.2014, 23:04  [ТС] 17
Спасибо! Попробую! Но это вовсе не проблема
0
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
28.01.2014, 23:40  [ТС] 18
Простите что не совсем по теме.....
Не везет, так не везет! Теперь "затык" со стороны МК....

Мне нужно:
- целые температуры преобразовать в символ, и отсылать в порт
- десятые температуры преобразовать в символ, и отсылать в порт

делаю так:
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
volatile char c[9];
volatile unsigned char temp_buff[9];
volatile unsigned int temp,temp0,temp1,temp2;
...............
 
if(power)
{
if(temp0>1000) temp0=1000;
if(temp0==0) temp0=1;
if(temp1>1000) temp1=1000;
if(temp1==0) temp1=1;
if(temp2>1000) temp2=1000;
if(temp2==0) temp2=1;
if(temp>1000) temp=1000;
if(temp==0) temp=1;
 
temp_buff[0]= temp0/10;
temp_buff[1]= temp0%10;
temp_buff[2]= temp1/10;
temp_buff[3]= temp1%10;
temp_buff[4]= temp2/10;
temp_buff[5]= temp2%10;
temp_buff[6]= temp/10;
temp_buff[7]= temp%10;
    
if(read_adc(0)==0) temp_buff[8]=1;
else temp_buff[8]= read_adc(0);
 
printf("T= ");    
for(x=0; x<9; x++)
{
     c[x] = temp_buff[x];
     printf("%c", c[x]);
}
printf(" END\n\r");
}

Пробовал уже разнообразные типы переменных - ни хрена не выводит temp0/1/2 , данные с АЦП - выводит.....

Среда - CVAVR
МК - Atmega16
0
Модератор
Эксперт .NET
5304 / 4100 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
28.01.2014, 23:46 19
Тут я вряд ли подскажу... Это, как я понимаю, С или С++? Я перед тем как шарп изучать, немного по С++ читал, вроде могу кое-что на нем (хотя бы прочитать код).
1
1 / 1 / 1
Регистрация: 06.10.2013
Сообщений: 75
28.01.2014, 23:50  [ТС] 20
Нет, это чистый Си. Спасибо что откликнулись!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2014, 23:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как преобразовать строку string в int?
имеется строка string которая содержит такие наборы символов - &quot;0,0,0,3,32,253,0,0,43&quot; необходимо...

Как преобразовать строку из TextBox в int ?
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { //Считываем...

Как преобразовать строку char в массив int?
Дана строка символов S, состоящая из чисел, разделенных пробелами Нужно выделить числа и засунуть...

Преобразовать строку цифр в число типа int
Здравствуйте! Помогите поправить код функции, не работает при работе с ведущим знаком '-'....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.