|
0 / 0 / 0
Регистрация: 30.09.2017
Сообщений: 182
|
||||||||||||||||
Недопонимание QByteArray10.01.2018, 11:14. Показов 9096. Ответов 47
У меня происходит соединение по UDP, всё происходит на моём компьютере. Есть программа, которая отправляет строчки раз в секунду
почему в дебаге получается вот такое \x00\x00\x00&\x00s\x00o\x00m\x00""e\x00 \x00""a\x00m\x00""a\x00z\x00i\x00n\x00g\ x00 \x00t\x00h\x00i\x00n\x00g\x00s в какой форме вообще он выводит этот Байт Аррей? Я думал, что х будет означать Hex форму, но ничего подобного я вижу здесь свои буквы, но к чему, например \x00 (при qDebug() << baDatagram.toHex() он дописывает дополнительные 00 перед каждой буквой, почему он это делает????) Откуда иногда берутся вот эти кавычки "" Почему перед строкой помимо всего прочего он дописывает это "\x00\x00\x00&" Заранее спасибо.
0
|
||||||||||||||||
| 10.01.2018, 11:14 | |
|
Ответы с готовыми решениями:
47
QByteArray и UCS2-BE
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||
| 20.08.2020, 06:48 | ||||||
|
insite2012, я просто больше учусь программировать микроконтроллеры на С, но периодически приходится иметь дело с C++, поэтому много не знаю и обращаюсь сюда за помощью, чтобы понимающие люди подсказали в каком направлении искать решение.
Так будет правильно?
0
|
||||||
|
|
||||||
| 20.08.2020, 06:53 | ||||||
|
Можно одной строкой.
1
|
||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||
| 20.08.2020, 09:02 | |||||||||||
|
insite2012, Avazart, С преобразование данных теперь все нормально, спасибо за помощь, можете подсказать по поводу проверки bytesAvailable?
Есть функция в которой идет прием данных:
Добавлено через 29 минут Просто у меня помимо соединения TCP, извлечения и преобразования данных, идут еще функции сравнения полученных данных, создания строки, записи в файл и тд, все это выполнять в void MainWindow::sockReady() я думаю будет неправильно, но вопрос тогда куда передать данные из void MainWindow::sockReady() чтобы в дальнейшим с ними работать?
0
|
|||||||||||
|
|
|||
| 20.08.2020, 10:25 | |||
|
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||
| 20.08.2020, 10:47 | |||||||
|
insite2012,
Про принцип единственной ответственности я понял, просто большие пробелы в знании Qt и C++. Логика работы программы заключается в том, чтобы отослать данные на микроконтроллер, он их принял, в ответ начал отсылать данные с АЦП, программа их приняла, преобразовала, записала в файл. Параллельно еще работают таймеры и тд. Вот код, который используется сейчас, вроде отсылает и принимает все как надо, теперь буду пробовать добавлять новые функции в программу Файл mainwindow.cpp Кликните здесь для просмотра всего текста
Можете подсказать как уйти от waitFor? Ситуация примерно такая же как и у вас с последовательным портом: ждем данные, как только пришли, отрабатываем их преобразование, ждем следующую порцию данных
0
|
|||||||
|
|
|
| 20.08.2020, 11:16 | |
|
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 20.08.2020, 11:26 | |
|
insite2012, хорошо, спасибо, жду
0
|
|
|
|
||
| 20.08.2020, 12:47 | ||
|
0
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 20.08.2020, 13:04 | |
|
insite2012,
На МК настроено несколько каналов 12 битного АЦП (для отладки я пока взял только 1 канал). АЦП несколько раз в секунду измеряет состояние входов, DMA извлекает данные. Дальше в зависимости от входящего сигнала с ПК на МК, данные АЦП усредняются (в 10, в 100 или в 600 раз), Еще из входящих сигналов для МК это запуск передачи данных и их остановка. Итого для МК входящие сигналы: запуск АЦП, остановка, значение во сколько раз усреднять данные. Сигналы могут быть посланы от пользователя в процессе работы МК. Теперь что делает программа на ПК: создает файл (csv) единоразово, при запуске. Дальше по приходу данных от МК они преобразуются сначала в 16-битные, затем сравниваются с массивом значений (здесь происходит подмена принятых данных значением из массива, т.к. принимаем мы величину АЦП, а затем меняем ее на идентичную ей величину температуры), и записываются в csv файл в виде строки первым аргументом которой идет время приема обработанной партии данных. Как-то так. С похожим вопросом я уже обращался на форум но только там прием был по UART, ну и мной было нарушен принцип единственной ответственности, поэтому сейчас хочется сделать все более правильно с точки зрения построения кода, но пока не многим я владею в Qt.
0
|
|
|
|
||||||||||||
| 20.08.2020, 13:41 | ||||||||||||
Добавлено через 3 минуты
0
|
||||||||||||
|
|
|
| 20.08.2020, 13:55 | |
|
DmitryDDDD, уточните еще момент: допустим, мы соединились с мк через сокет, послали команду на передачу. Что дальше, нам в той же точке ждать ответа, или можно послать команду и выйти из метода, а потом в вызывающем коде ждать? То есть суть вопроса в том, как организована связь: запрос-обязательный ответ или просто запрос, а дальше ожидаем, и по приходу реагируем?
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 20.08.2020, 14:05 | |
|
insite2012, я думаю реагируем по прихожу. Может из моего объяснения что-то не так понятно, в сообщениях выше я имел ввиду, что например послали мы команду на усреднение, мк ее принял и шлет нам данные в зависимости от величины усреднения например раз в секунду. Сидим получаем данные, потом захотелось нам получать данные не раз в секунду, а раз в минуту, отсылаем новую команду на усреднение и мк уже накапливает больше данных, усредняем их, и результат отправляет раз в минуту.
Т.е. запрос, получаем поток данных, как понадобилось делаем новый запрос, опять получаем поток
0
|
|
|
|
||||||||||||
| 20.08.2020, 14:43 | ||||||||||||
|
Вам можно тогда не особо заморачиваться.
0
|
||||||||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||||||||||||
| 21.08.2020, 13:03 | ||||||||||||||||
|
insite2012, Спасибо за предоставленный код, очень помогает разобраться в чем-то, долго копался в нем, хотел в том виде как он есть перенести на свою программу, но вылетали ошибки, потом решил перенести его частично, так как прослеживается аналогия, вот результат, прошу посмотреть, может указать на ошибки, которые здесь есть:
mainwindow.h Кликните здесь для просмотра всего текста
mainwindow.cpp Кликните здесь для просмотра всего текста
Некоторые вопросы есть в комментариях, еще такой момент: компилятор говорит, что параметр socketError не используется Так же вопрос, у меня везде идет отправка данных в виде строки socket->write("5"); У Вас я увидел что-то похожее на возможность передачи буфера или целочисленого значения
0
|
||||||||||||||||
|
|
|||
| 21.08.2020, 14:30 | |||
|
По критике кода. 1. Вывод об успешном соединении нужно делать не сразу после вызова connectToHost () (может, сокет и не сможет соединиться), а в слоте, подключенном к сигналу connected() 2. Удаление сокета (deleteLater()) можно подключить к его же сигналу disconnected(). 3. Я так понимаю, ваш проект простой, хотя я бы рекомендовал выносить всю работу с сокетом в отдельный класс, и не мешать код интерфейса непосредственно с работой сокета. Так будет удобнее. Можно вообще написать весь класс в консоли, там его и отладить, а интерфейс уже прикрутить потом.
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||
| 22.08.2020, 07:16 | ||
|
insite2012,
Я же могу добавить ваши файлы cpp и h в свой проект не пересоздавая его, затем обращаться к функциям сокета, или в настройках при создании надо что-то указывать?
0
|
||
|
|
|||
| 22.08.2020, 08:35 | |||
|
1
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||
| 22.08.2020, 09:52 | ||
|
insite2012, Хорошо, спасибо за помощь),
Я думаю мне сначала надо немного почитать по Qt и C++, да и взяться за код. Тогда уже создам новую тему и обязательно обращусь за помощью)
0
|
||
|
|
||
| 22.08.2020, 10:12 | ||
|
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||||||
| 22.08.2020, 10:32 | |||||||
|
для объединения нужно арифметическое (|)
0
|
|||||||
| 22.08.2020, 10:32 | |
|
Структуру в QByteArray
Запись в QByteArray QByteArray и память
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|