Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128

Некорректная работа метода String.Join()

24.10.2025, 10:02. Показов 1487. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день. Столкнулся с проблемой.
С МК STM32F4 через преобразователь интерфейсов UART -> USB CH340 передаю массив из 73 байт включая символ '\n' на ПК и данные обрабатываю в своей программе. Почему то МК разбивает этот массив ровно по 32 байта и между ними втыкает временный интервал хотя этот массив отсылаю через uart не прерывно. Ещё проблема в
C#
1
ScrollableList("listBox1", String.Join("", str_tmp));
почему то данный метод не хочет объединять все данные одномерного массива
C#
1
string[] str_tmp = new string[255];
и тупо постоянно выводит только значения первого индекса str_tmp[0]. На скрине видно что массив содержит всю передаваемую строку из 73 байт.
Передаваемая строка с МК
C#
1
HAL_UART_Transmit(&huart1, (uint8_t*)":2222222222222222222222222222222222AAAAAAAAAAAAAAAAAAAAAAAAA33333333333:\n", 73, 500);
Обработчик на ПК часть кода
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
        public string ScrollableList(string myListBox, string str)                                                                                  //Метод обеспечивает асинхроный вывод системных событий в форму listBox1
        {
            Invoke(new Action(() =>
            {
                (Controls[myListBox] as ListBox).Items.Add(DateTime.Now + "  " + str);
                (Controls[myListBox] as ListBox).SelectedIndex = (Controls[myListBox] as ListBox).Items.Count - 1;
                (Controls[myListBox] as ListBox).SelectedIndex = -1;
            }));
            return DateTime.Now + "  " + str;
        }
 
 
public void COMport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (COMport != null)
            {
                if (COMport.BytesToRead != 0)         //Проверка на пустой буфер обязательное условие иначе приём данных будет работать не корректно
                {
                    
                    try { Variables.line_read = COMport.Read(Variables.data_read_byte, 0, Variables.data_read_byte.Length); }
                    catch (Exception ex) { return; }
 
                    /*try { str = COMport.ReadExisting(); }
                    catch (Exception ex) { return; }*/
 
 
                    try { BeginInvoke(new ClassDeleg.DataReceivedDeleg(DataReceivedCOM), Variables.data_read_byte, str, Variables.line_read); }
                    catch (Exception ex) { return; }
 
                }
                else if (COMport.BytesToRead == 0)  //счетчик пустых пакетов обязательное условие на корректную работу по приёму
                {
                    Variables.cout_zero_pack++;
                    
                    return;
                }
            }
            else if (COMport == null)
                ScrollableList("listBox1", "ИНФОРМАЦИЯ - Приём данных: (SerialPortCOM) имеет значение NULL");
 
        }
        string[] str_tmp = new string[255];
        int cout = 0;
        public byte DataReceivedCOM(byte[] DataReceived, string str, int line_read)
        {
            Encoding  encDefault = Encoding.Default;
            str_tmp[cout] = encDefault.GetString(DataReceived);
            if (str_tmp[cout].Contains('\n') == true)
            {
                  
                ScrollableList("listBox1", "Получено из порта " + COMport.PortName.ToString() + "-->> " + str_tmp[0]);
                ScrollableList("listBox1", "Получено из порта " + COMport.PortName.ToString() + "-->> " + str_tmp[1]);
                ScrollableList("listBox1", "Получено из порта " + COMport.PortName.ToString() + "-->> " + str_tmp[2]);
                ScrollableList("listBox1", String.Join("", str_tmp));   
                Array.Clear(str_tmp, 0, cout);
                cout = -1;
            }
            cout++;
            COMport.DiscardInBuffer();
            Array.Clear(DataReceived, 0, line_read);
            return 255;
        }
скрин программы по завершению передачи всех 73 байт
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2025, 10:02
Ответы с готовыми решениями:

Преобразовать из Dictionary<string, string> в Dictionary<string, List<string>>
Желательно лямбдой. Буду благодарен за варианты.

Аналог метода string.join
Какой еще метод помимо String.Join можно использовать в 12 строке? int n; ...

Некорректная работа метода .Parse()
Думаю, на картинках отражена суть проблемы. Подскажите, что с этим делать, почему так происходит? ...

16
Эксперт .NET
 Аватар для Wolfdp
3781 / 1755 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3
24.10.2025, 10:58

Не по теме:

Код конечно прям ух...



Судя по скрину, можно заметить что у вас режется отображение. Т.е. судя по всему сам контролл не хочет отображать весь текст.

В любом случае тыкните брекпоинт в ScrollableList и убедитесь на 100% что прилетает в str.
0
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
24.10.2025, 11:15  [ТС]
Wolfdp, спс за инфу. Причину нашёл в железе девайса который шлёт данные на ПК.
0
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
24.10.2025, 16:05  [ТС]
Wolfdp, но хотелось бы добить этот вопрос, вот что возвращает метод
C#
1
str_t = String.Join("", str_tmp);

Откуда там столько нуль символов?
0
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
24.10.2025, 16:09  [ТС]
И в массиве str_tmp эти же нуль символы
0
Эксперт .NET
 Аватар для Usaga
14071 / 9289 / 1346
Регистрация: 21.01.2016
Сообщений: 34,850
24.10.2025, 16:12
Цитата Сообщение от MechanicVV Посмотреть сообщение
Откуда там столько нуль символов?
Это тебя надо спросить. Сам метод работает правильно уже почти 25 лет.

Добавлено через 1 минуту
Цитата Сообщение от MechanicVV Посмотреть сообщение
И в массиве str_tmp эти же нуль символы
А кто их туда записал?
0
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
24.10.2025, 16:15  [ТС]
Usaga, Всё нашёл причину. В методе
C#
1
2
try { Variables.line_read = COMport.Read(Variables.data_read_byte, 0, Variables.data_read_byte.Length); }
                    catch (Exception ex) { return; }
я объявил массив Variables.data_read_byte как public byte[] data_read_byte = new byte[512]; вот и нули.
0
Эксперт .NET
 Аватар для Usaga
14071 / 9289 / 1346
Регистрация: 21.01.2016
Сообщений: 34,850
24.10.2025, 16:17
Цитата Сообщение от MechanicVV Посмотреть сообщение
catch (Exception ex) { return; }
Если ты не враг сам себе или тем, кто этих мусором будет пользоваться, то так не делай.
0
Эксперт .NET
 Аватар для Wolfdp
3781 / 1755 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3
24.10.2025, 16:32
MechanicVV, дык сначала считываешь в буфер byte, потомВЕСЬ буфер конвертишь в строку игнорируя сколько там реально пришло на вход. Типичная ошибка начинающего падавана.
0
60 / 185 / 31
Регистрация: 14.02.2013
Сообщений: 1,669
24.10.2025, 19:32
Цитата Сообщение от Wolfdp Посмотреть сообщение
Типичная ошибка начинающего падавана.
Это всего лишь хобби но может дочь станет хорошим кодером.

Добавлено через 9 минут
Wolfdp, Я Trim применил, отрубил нулевые хвосты.

Добавлено через 44 секунды
Цитата Сообщение от Usaga Посмотреть сообщение
Если ты не враг сам себе или тем, кто этих мусором будет пользоваться, то так не делай.
Подскажите как? Мне думалось что так логично.
0
Эксперт .NET
 Аватар для Usaga
14071 / 9289 / 1346
Регистрация: 21.01.2016
Сообщений: 34,850
25.10.2025, 04:44
Цитата Сообщение от VladimirU Посмотреть сообщение
Подскажите как? Мне думалось что так логично.
Что "как"? Как работать с исключениями?

Цитата Сообщение от VladimirU Посмотреть сообщение
Мне думалось что так логично.
Логично молча вернуть управление, оставив приложение в неконсистентном состоянии и потом бежать на форум, спрашивать почему приложение какие-то нули лишние выдаёт?))
0
Эксперт .NET
 Аватар для Wolfdp
3781 / 1755 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3
25.10.2025, 11:30
Цитата Сообщение от VladimirU Посмотреть сообщение
Я Trim применил, отрубил нулевые хвосты.
Главное что такой код не отрубает пальцы, так что в целом жить можно.

Цитата Сообщение от VladimirU Посмотреть сообщение
Подскажите как? Мне думалось что так логично.
Нет, не логично. Пустой catch -- признак того, что делается что-то неправильно.
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,041
Записей в блоге: 14
25.10.2025, 12:44
MechanicVV и VladimirU это один человек?
1
25.10.2025, 12:55

Не по теме:

Цитата Сообщение от Rius Посмотреть сообщение
MechanicVV и VladimirU это один человек?
Как я понял, Владимир это дочь. (╯▽╰ )

0
60 / 185 / 31
Регистрация: 14.02.2013
Сообщений: 1,669
25.10.2025, 21:52
Цитата Сообщение от Wolfdp Посмотреть сообщение
Владимир это дочь.
Ващее не разу не так. Имя моей дочери Ксения.

Добавлено через 41 секунду
Цитата Сообщение от Rius Посмотреть сообщение
MechanicVV и VladimirU это один человек?
Да так.

Добавлено через 3 минуты
Wolfdp, пока обучается в Scratch. Ей уже 11 лет наверное пора отправлять на что то более серьёзное.

Добавлено через 2 минуты
Wolfdp, у неё заслуг для своих годов на пол моей жизни, в её годы я был полный дебил, лишь где бы чё взорвать, своровать.
0
run
 Аватар для I can
4914 / 4528 / 837
Регистрация: 13.04.2015
Сообщений: 9,657
26.10.2025, 05:14
Цитата Сообщение от VladimirU Посмотреть сообщение
MechanicVV и VladimirU это один человек
А что так можно?
0
26.10.2025, 09:32

Не по теме:

Цитата Сообщение от I can Посмотреть сообщение
А что так можно?
Насколько знаю -- нет.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2025, 09:32
Помогаю со студенческими работами здесь

Некорректная работа метода Clear() в списке List<>
Доброго всем здоровья уважаемые форумчане! Есть такой код сортировки списка класса: var...

Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода
В базовом классе метод помечен как virtual. Насколько я понял из книги: override означает, что...

List<string, string, string> есть ли в C# что-то подобное?
Мне надо добавить в List не только имя файла, но и некоторые строки из этого файла. Т.е. например,...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population....


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru