Задать вопрос
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    А ещё один момент, когда я вывожу на экран в формате допусти "%X" он же не меняет сам себя, а только нам отображать да?

    Если выводите через printf, то исходная переменная (decValue) никак не меняется, шестнацатиричные цифры будут только на экране.
    Если используете snprintf для формирования буфера, то после выполнения snprintf в буфере будет содержаться строка с шестнацатиричными цифрами. Ее потом можно вывести просто как строку printf("%s\n", asciiHex);
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    не переводить из HEX ASCII в DEC, а потом обратно, а сразу на его уровне прибавить

    Можно. Но, пожалуй, с конвертацией это будет гораздо проще сделать.

    Если отладчик не запускается, то используйте отладочный вывод я же уже писал. Это такой ручной способ отладки, его не всегда можно применять (как и сам отладчик), но в вашем случае вполне можно.

    Вот набросал ваш пример в готболте: https://gcc.godbolt.org/z/qKncjfPac
    Работает.
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    в Serial2.available() я проверяю всё что мне приходит

    Ок
    вчера работала ,сегодня нет

    Попробуйте удалить все артефакты сборки, т.е. объектные файлы, исполняемый файл (прошивку или что там у вас в ардуинке) и т.п. (в IDE это обычно можно сделать через меню, что-нибудь типа Clear Project) и пересобрать весь проект с нуля.
    Ваш код пробую пишет 2А в первую ячейку, голова кругом

    Добавьте отладочного вывода на промежуточных этапах, чтоб проверить состояния промежуточных переменных и т.п. Или используйте для этого отладчик.
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400, После read явно не хватает проверок полученных данных на корректность по требованиям протокола. Вдруг вам там пургу гонят или например вы прочитали пакет не до конца и т.п. Прочитать только часть пакета из последовательного порта (да и не только) можно легко, это вообще обычное поведение всех коммуникационных вызовов.

    Запустите под отладчиком да посмотрите по шагам где тут косяк.
    Или просто выводите в лог (на экран или куда можете) промежуточные значения.
    При входных данных "95" в asciiHex должно содержаться {'9', '5', 0}

    В целом ваш код выглядит правильно, но много лишних телодвижений на мой взгляд. Возможно вам это для чего-то надо, не знаю.
    Правда осталось не ясно как определен kolchislo. И вы продолжаете использовать VLA в buffff. VLA - это зло. Подумайте как уйти от этого.
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400, Какого массива? На каком этапе? Вы постоянно не договариваете и не приводите ваш код в котором ошибка. На эти вопросы нельзя ответить.
    Код можно приводить тут или публиковать где-нибудь на https://gcc.godbolt.org/ или на том же github.
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400, 31 и 39 - это шестнадцатиричный код символов '1' и '9'
    https://www.asciitable.com/

    После преобразования строки "\x31\x39" в число вы получите decValue==25==0x19
    В decValue вообще хранится число в двоичном виде (не в десятичном и не в шестнадцатиричном).
    Как сделать так, чтобы он не 25, а сразу 19 писал?

    Serial.printf("%X\n", decValue);
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    byte kolchislo[]={0x00,0x00,0x00,0x00,0x00};
    razmer=1;// может и 2 и 3 быть, от этого завесить дальнейший размер
    char asciiHex[sizeof(kolchislo) + 1];
    for(int i = 0;i<razmer;i++){
                asciiHex[i]=kolchislo[i];
              }
    asciiHex[razmer] = 0;
    int decValue = strtol(asciiHex, NULL, 16);
    decValue++;
    Serial.printf("%X\n", decValue);
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    1. char asciiHex[razmer];
    Это массив переменной длинны (VLA). Не советую его использовать вообще никогда.
    Лучше сделайте, например так:
    char asciiHex[sizeof(kolchislo)];
    2. Как я писал в ответе strtol ждет от вас в параметре строку (null terminated string). У вас даже и не пахнет в asciiHex null terminated - это выход за пределы выделенной памяти и UB. Чтоб asciiHex сделать null terminated надо:
    - сделать asciiHex на 1 байт больше
    - записать после всех данных 0: asciiHex[razmer] = 0;
    3. Обратное преобразование вы делаете 2 раза: в sprintf и в Serial.printf. На выходе явно получите не правильный результат. Достаточно такого варианта: Serial.printf("%X\n", decValue);
    Без цикла и без промежуточного массива.
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400, Кто кого превратил? Не понятно. Давайте пример кода.
  • Почему GCC не видит встроенную атомарную операцию?

    @res2001
    Не хочу возиться со всякими dummy узлами

    Имеете ввиду алгоритм очереди Майкла&Скотта?
    Там не для красоты используется фиктивный узел в очереди.
    Без фиктивного узла вам нужно будет атомарно изменять 2 указателя (node->next и home/end). Правда, у вас пока еще указателя end нет, но он появится вскоре, я думаю.

    Еще немного, раз уж вы не используете функции из стандартной библиотеки, тогда не мешало бы определять все указатели, участвующие в атомарных операциях как volatile. И про выравнивание атомарных переменных то же не забывайте.
  • Почему GCC не видит встроенную атомарную операцию?

    @res2001
    Сергей Соловьев,
    Во-вторых, я использую C

    Я дал ссылку на Сишный вариант.
    В отношении атомиков стандартный функционал С++ и С идентичен, начиная с версии 11 обоих ЯП
    В С++ правда еще можно в классы, но это можно рассматривать как надстройку над атомарными функциями.
  • Как оптимизировать код с++ с рекурсией в времени?

    @res2001
    Используйте std::div для вычисления остатка и частного одновременно.
  • Как подключить библиотеку TgBot к срр проекту?

    @res2001
    Тимофей, Т.к. вы используете vcpkg, то оптимально было бы добавить путь в PATH к каталогу vcpkg/.../bin. Тогда у вас автоматически все библиотеки предоставляемые vcpkg станут доступны.
    Так же не забудьте, что при переносе приложения на другой комп (или изготовлении инсталятора) надо будет тащить с собой и dll (lib не нужен). Тут так же надо будет решать куда положить dll: можно рядом с exe, можно в c:\windows\system32
  • Как составить план по изучению языка C++?

    @res2001
    во всех книгах план примерно такой

    Это не план, это оглавление
    тип string является вовсе не типом, а классом

    Классы - это и есть типы. Только это не встроенные типы, а типы определяемые пользователем. В случае с std::string - это тип определяемый стандартной библиотекой, но это не принципиально.
    Кроме классов есть еще структуры, это по сути одно и то же, кроме небольших различий.
    ввод/вывод в консольном приложении осуществляется через объекты cin и cout

    И что? У вас с этим проблемы? Можете использовать и std::printf, но это не "С++ style" :)

    Как тут уже все не однократно писали - больше практики. Делайте задания из книг, придумайте свой проект и пытайтесь его реализовать.
  • Как подключить библиотеку TgBot к срр проекту?

    @res2001
    Тимофей, Переложить dll либо в папку с вашим exe файом, либо в каталог, который указан в PATH, либо добавить в PATH собственный путь. Т.е. просто сделать так, чтоб винда по своему алгоритму поиска dll смогла найти нужный вам файл.
  • Как подключить библиотеку TgBot к срр проекту?

    @res2001
    Тимофей, На скринах инструкция правильная.
    Я бы не использовал вариант с pragma, а подключал библиотеку "альтернативным" способом. Хотя этот способ собственно основной, а никак не альтернативный. А pragma - как раз альтернативный и поддерживается далеко не всеми компиляторами.
    Проверьте, чтоб lib и dll файлы находились в каталогах, указанных в п.1, а заголовочные файлы библиотеки находились в каталоге Additional Include Directories.
  • Ошибка в bat скрипте который изменяет протокол ip версии 4 (tcp/IPv4), как исправить?

    @res2001
    Роман Страх,
    не нравится ему маска все равно + ip пустой

    Предполагаю, что ему больше не нравится пустой IP, а маска как следствие.
    Почему IP пустой? Вы же писали выше, что IP выделить получается. После цикла поиска IP напечатайте содержимое ip_address.
    Кстати, после цикла уже можно использовать стандартный вариант обращения к переменной: echo.%ip_address%
  • Ошибка в bat скрипте который изменяет протокол ip версии 4 (tcp/IPv4), как исправить?

    @res2001
    Роман Страх,
    по отдельности получается найти ip , грамотно через tokens выделить только его но все вместе работать не хочет.

    По крайней мере у меня ваш цикл отрабатывает, правда у меня английская винда, пришлось немного подправить строку поиска. Одно но - ip_address будет установлен в последний адрес в списке, если интерфейсов несколько.

    Возможно стоит указать полный вариант команды:
    netsh interface ip set address name="%interface_name%" source=static address=!ip_address! mask=%subnet_mask% gateway=%gateway%

    Можете так же выдернуть команду из батника и выполнить ее в ком.строке целиком, без консоли netsh.
  • Как исправить ошибку буфера с UART?

    @res2001
    Павел Соколов,
    для обработки ERROR_IO_PENDING как раз и применяется WaitForSingleObject

    В случае чтения вызов WaitForSingleObject только после WaitCommEvent.
    Я же пишу о том, что ReadFile может вернуть ERROR_IO_PENDING, даже в вашем случае.

    Таймауты сейчас скорее всего роли не играют. Но в таком случае их лучше не использовать.

    Зачем использовать EV_ERR когда мы передаем и получаем одинаковое кол-во байт? Куда переполнится буфер если мы всего для теста запускаем 1 отправку и 1 чтение, а запас в 1,5х объема?

    Имею ввиду промежуточный буфер ядра, а не ваши буфера, которые вы передаете в ReadFile.
    Если вы не успеваете почему то вычитывать данные при их большом количестве, то буфер ядра может переполнится и будут пропуски данных.