• Windows как маршрутизатор?

    @res2001
    The_Immortal,
    Вот этот вопрос не очень понимаю... VPN A: 172.16.3.37 (по этому IP устройство B имеет доступ к устройству A).

    Для простоты можно рассматривать ВПН как еще один сетевой адаптер. Чтоб он нормально работал у него должен быть IP адрес. Т.к. такие ВПН адаптеры находятся на обоих узлах в сети ВПН, то и IP адреса должно быть как минимум 2 (если в ВПН сети только 2 устройства).
    У вас же везде фигурирует только 1 адрес 172.16.3.37.
    На винде посмотреть ВПН адрес можно с помощью ipconfig /all (ну или открыть окно status по ВПН подключению). Как посмотреть ВПН адрес на роутере не скажу, но там возможно адрес 172.16.3.1. Можете попинговать, например. Но лучше это где-выяснить в интерфейсе роутера или в ком.строке. В общем, на обоих узлах должен быть свой собственный ВПН адрес и эти адреса должны различаться.
    Т.к. вы на обоих узлах ВПН прописываете один и тот же адрес маршрутизатора в маршруте, то на одном из узлов этот адрес будет не верным и маршрутизация работать нормально не будет.
    Написано
  • Windows как маршрутизатор?

    @res2001
    Дополнительные вопросы:
    1. сети за А и В имеют разные адреса подсетей? Какие?
    2. из описания не ясны ВПН адреса А и В.

    На Устройстве B прописал маршрут до сети Устройства А через VPN-интерфейс:

    То же самое надо сделать и на устройстве А для сети устройства В.
    Ну и для теста отключите фаервол на винде. Если заработает, включите и если будет что-то блокировать, то надо будет вручную добавить разрешающие правила.

    Пожалуйста, подскажите, в рамках использования клиентского Windows задача не выполнима?

    Задача вполне выполнима. Неоднократно использовал это в работе начиная с Windows 2000.
    Написано
  • Что подразумевается под поиском двух линий при создании контейнера?

    @res2001
    По рисунку все понятно.
    В примере найдены 2 линии 2 и 9. Они образуют "двумерную" емкость в которую может поместиться 49 чего-то воды.
    49 = 7*7, где
    первая 7 - это расстояние между 9 и 2 линией по Х, т.е. 9-2=7
    вторая 7 - это длина наименьшей из двух выбранных линий (7 и 8), т.к. именно это значение ограничивает объем получаемой емкости.
    Написано
  • Какие книги подойдут для изучения c++?

    @res2001
    По логике, пожалуй, стоит :-)
    Для изучения С++ подойдет любая более-менее современная толстая книжка по С++.
    Например Прата возьмите.
    Написано
  • Почему неправильно считает Коэффициенты регрессии?

    @res2001
    Борис Стасев, Добавьте в код дополнительный отладочный вывод промежуточных результатов и смотрите на каком этапе выводимые данные начинают не сходится с вручную рассчитанным результатом.
    Для простоты можно сократить входной файл и т.п.
    Можно разбить задачу на части и отлаживать каждую часть, как отдельную задачу, добиваясь правильного результата для каждой отдельной части. И т.д и т.п.

    Отладочный вывод потом удалите, когда все отладите.

    Вместо отладочного вывода можно использовать отладчик, но для вашей задачи, пожалуй, проще будет использовать именно вывод промежуточных результатов.

    Чтоб избавиться от вероятных ошибок связанных с использованием типа float, перейдите на тип double. У float очень низкая точность, всего 6-7 значащих десятичных цифр. Из-за этого при интенсивных расчетах с float могут быть не корректные результаты.
    Отладитесь с double, перейдете обратно на float (если float вам принципиален) и посмотрите, как изменится результат. С некоторыми ошибками точности можно попробовать побороться, но далеко не со всеми. Это специфика типов с плавающей точкой. У double то же есть свои ограничения по точности (15-17 значащих десятичных цифр), но они гораздо больше, чем у float и обычно точности double хватает.
    Написано
  • Какой структурой можно повесить lock на диапазон?

    @res2001
    Как вариант - блокировать каждый пакет из диапазона
    Написано
  • Как вывести изображение с прозрачным фоном WinApi c++?

    @res2001
    Точного ответа не знаю. Но могу предположить, что голая винда, возможно, умеет только в BMP. Поддержка разных форматов изображений - это не задача ОС. Так же как и звука/видео и т.п.
    Все остальное может быть использовано через дополнительные преобразования.
    Ищите подходящие библиотеки для работы с изображениями. Можно начать с libpng. Можно поискать что-то более универсальное с поддержкой разных форматов, если вам это может понадобится в дальнейшем.
    Написано
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    реально?

    strtol и atoi делают одно и то же.
    Только atoi старый вариант с лохматых времен и она ничего не знает про системы счисления - для нее входной параметр всегда в десятичной системе.
    strtol - умеет в системы счисления, и не только в стандартные, вплоть до 36. Видел один раз использование 36ричной системы счисления в жизни :) позволяет сильно ужимать числа по сравнению с десятичной в текстовом представлении.
    Написано
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    с делал вот так

    Блин. Дак у вас на входе десятичные цифры, записанные в строке. Вам достаточно было в первоначальном варианте сделать strtol(asciiHex, NULL, 0);
    Я думал, что на входе шестнадцатиричные, т.к. и вы использовали систему счисления 16 в strtol. Да и вопрос задан соответствующим образом.
    Написано
  • Как конвертировать из 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 обоих ЯП
    В С++ правда еще можно в классы, но это можно рассматривать как надстройку над атомарными функциями.
    Написано