• Можно ли убрать "мигание" консоли?

    @res2001
    Developer, ex-admin
    Может быть не надо очищать экран? Просто следующий кадр выводите следом, но так чтоб он занимал все окно, предыдущий будет сдвинут вверх.
    Ответ написан
    3 комментария
  • Почему побайтовый сдвиг даёт разные результаты?

    @res2001
    Developer, ex-admin
    Читайте тут до прояснения раздел "Bitwise shift operator.
    Смысл в том, что если вы знаковое число сдвинули влево так, что старшим разрядом стала 1, то в результате получится отрицательное число. При сдвиге вправо знакового числа, освобождающиеся слева разряды заполняются битом знака (а не нулем), поэтому результат сдвига отрицательного числа так же будет отрицательным (а положительного - положительным:). Если сдвигать вправо беззнаковое число, то свободные биты будут всегда заполнятся нулями.
    Кстати, на сколько помню, по стандарту знаковость char не определена (может быть как знаковым так и беззнаковым). Вам с вашим примером не повезло, char оказался знаковым. Зато это дало возможность немного глубже понять сдвиги.
    Ответ написан
    6 комментариев
  • Нужно сделать циклический сдвиг вправо на 8 позиций. Считать из файла и записать в файл. Что не так?

    @res2001
    Developer, ex-admin
    Алгоритм циклического сдвига описан в старинной книге Джона Бентли "Жемчужины программирования".
    https://codelib.ru/task/cycle_shift/
    Ответ написан
    Комментировать
  • Что значит запись shifter_carry_out = C Flag?

    @res2001
    Developer, ex-admin
    Видимо имеется ввиду бит C (Carry condition flag) регистра CPSR. Обычно по контексту понятно, что имеется ввиду.
    Вообще в таких случаях приводите больше контекстной информации, а то вы выдернули кусок кода откуда то, думай что хочешь.
    Ответ написан
    3 комментария
  • Если у меня статический ip, является ли он публичным и общедоступным?

    @res2001
    Developer, ex-admin
    Если статический адрес не вписан в договор с провайдером (или его нет в списке предоставляемых услуг), то скорее всего адрес динамический. Если сейчас он кажется вам статическим, то это не значит, что в один прекрасный день провайдер его не может поменять.
    Список диапазонов серых адресов короткий, все диапазоны известны и описаны в RFC, гуглите. Если ваш адрес входит в один из диапазонов - значит он серый (не публичный и не общедоступный).
    Ответ написан
    Комментировать
  • Создание много папок в Windows?

    @res2001
    Developer, ex-admin
    В батниках все переменные строковые!
    set /a для арифметических действий преобразует строки в числа, делает действия и сохраняет строку в результате.
    Поэтому дополнение нулями простое: дописываем к числу максимальное необходимое количество нулей, затем убираем лишнее с помощью операции извлечения подстроки.
    Для извелечения подстрок читай:
    set /?
    Ответ написан
    3 комментария
  • Как безопасно подменить OpenVPN сервер?

    @res2001
    Developer, ex-admin
    Абсолютно нормально. Это ваши сертификаты. На старом сервере вы их генерировали самостоятельно (ну или тот кто был вместо вас и настраивал OpenVPN). В самом OpenVPN нет других сретификатов, кроме тех, которые вы ему предоставляете.

    В принципе для нового сервера вы могли бы сгенерировать другие сертификаты (файлы server.crt и server.key) их не нужно передавать клиенту. Так было бы совсем правильно (но и использовать ключи старого сервера то же вполне можно). Для генерации вам потребуется закрытый ключ CA (ca.key), если его нет, то сгенерировать новые ключи уже не возможно. И в этом случае вы столкнетесь с проблеммой, когда истекут сроки сертификатов. Вообще во всей инфраструктуре ключей шифрования ключ и сертификат CA - самые ценные составляющие, остальные можно легко менять.
    Ответ написан
    2 комментария
  • Как исправить AccessViolation при чтении указателя, считанного при помощь CArchive?

    @res2001
    Developer, ex-admin
    Не заню, что там в CArchive и вообще MFC давно не брал в руки, но предполагаю, что нужно использовать такой вариант:
    Fruit fruit;
    ar >> fruit;

    Для сериализации/десериализации вызывается метод Serialize вашего же класса, т.е. сам CArchive не создает сериализуемые классы. Следовательно вы должны передать операции >> ссылку на существующий класс, а не указатель. ar просто перезапишет содержимое класса, точнее не ar перезапишет, а ваш же метод Serialize.
    Ответ написан
  • Как копировать папки из каталога по маске?

    @res2001
    Developer, ex-admin
    Ищите папки по маске с помощью dir: dir /b /ad c:\temp\log*
    Засовываем этот dir в for /f:
    for /f "tokens=* delims=" %%a in ('dir ...') do (
       echo %%a
    )

    В цикле копируем отобранные папки.
    Для инкрементации счетчика папок используем set /a "logidx=logidx+1"
    Для справки:
    for /?
    dir /?
    set /?
    if /?
    copy /?
    move /?
    md /?
    Ответ написан
  • Как написать простой калькулятор?

    @res2001
    Developer, ex-admin
    Например:
    atoi(ex.c_str())+atoi(ex.c_str())
    это выражение 2 раза преобразует в число одну и ту же строку, а затем складывает эти 2 одинаковых числа.
    Так что "не дублирует", а выполняет то что написано у вас в коде.

    Вам нужно сначала разделить строку на "токены", т.е. на операнды и операции.
    Если вы на этом этапе расчитываете обрабатывать только простейшие действия, то вводите строку и разбиваете ее на 3 токена. Затем операнды преобразуете в числа и после этого уже выполняете действие.
    Ответ написан
    Комментировать
  • Книги по сетевому программированию на c++?

    @res2001
    Developer, ex-admin
    Не нужно зацикливаться на С++, т.к. все сетевое API операционной системы на Си. Изучайте просто сетевое программирование. Когда разберетесь, то просто возьмете сетевую библиотеку для плюсов и будете ее использовать. Как правило, подобные библиотеки просто оборачивают Си интерфейс ОС в классы.
    Так же рекомендую книгу Стивенса. Но она старая (последнее издание 2007 года) и в продаже вы ее сейчас не найдете. Электронная версия есть. Не смотря на возраст книга вполне актуальна. Подобные основополагающие технологии изменяются довольно не торопливо.
    Ответ написан
    Комментировать
  • Какая IDE удобнее и проще для плюсов?

    @res2001
    Developer, ex-admin
    qtcreator - хорош
    Eclipse - довольно тяжел для понимания, тормозит на больших файлах или когда открыто много файлов (Java дает о себе знать). Но если планируешь программировать для embeded, то полезно научиться с ним работать, т.к. многие IDE предоставляемые производителями железа основаны на Eclipse.
    С clion не приходилось сталкиваться.
    Ответ написан
    1 комментарий
  • Как с помощью for добиться такого же результата, что и командой dir?

    @res2001
    Developer, ex-admin
    Я бы предложил запихнуть dir в for /f и в for обрабатывать вывод dir, добавляя нужную информацию:
    for /f "tokens=* delims" %%a in ('dir /s /b *') in (
       rem Тут можно писать любой другой код. Имя текущего файла в %%a
       echo %%~a
    )
    Ответ написан
  • Что такое offset и как обратиться к информации что хранится в нём?

    @res2001
    Developer, ex-admin
    offset - смещение (от какого-то базового адреса).
    Т.е. адрес вашего объекта вычисляется так: base address + offset.
    Осталось узнать базовый адрес и можно работать с цветами.
    Ответ написан
    Комментировать
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    Developer, ex-admin
    Если нет необходимости в подобной локальной переменной, то не нужно "кэшировать".
    На уровне ассемблера все обращения к памяти происходят через регистры, так что в любом случае адрес из указателя будет записан в регистр и этот регистр будет индексироваться.

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

    Часто удобно использовать локальную переменную, только потому, что указатель (ссылка) лежит где-то в третьей вложенности внутри класса - проще его сразу достать и дальше использовать короткую запись. Но это удобно программисту, а компилятору пофиг.

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

    С restrict можно поиграть, но в чистом С++ его нет, на сколько я знаю, но можно включить расширения в gcc/clang и, возможно его можно будет использовть в плюсовом коде. Но применяйте его лучше сразу к локальному bufferу, а не к this.

    Напоследок: подобного типа код выполняется достаточно быстро, оптимизировать тут особо нечего, есть смысл заморачиваться только если это очень-очень горячий код в вашем приложении. Ну и в плане оптимизации для подобных случаев лучше поискать варианты, как обойтись без копирования данных, чем надеятся, что restrict вам сильно поможет.
    Ответ написан
  • Выделение текста между двумя запятыми C++?

    @res2001
    Developer, ex-admin
    Потому что второй параметр в substr - это не конечная позиция, а количество символов. Ощути разницу.
    Ответ написан
    Комментировать
  • Почему мой вектор не работает со строками?

    @res2001
    Developer, ex-admin
    С clon все в принципе нормально. Можно конечно добавить std::move, но проблема не в этом.
    Проблема в том, что у тебя массив arr размером length - 1, а temp - length. А в clon() ты пытаешься копировать length элементов из arr, поэтому происходит выход за пределы массива.
    В PushBack делай инкремент length, только после того как вызовешь clon первый раз, но до второго вызова.

    Жаль немецкий убрал, было забавно :-) Но так гораздо привычней и понятней.
    Ответ написан
    Комментировать
  • Почему определение инкапсуляции дают неправильно?

    @res2001
    Developer, ex-admin
    Фиг знает, может из википедии?
    Модификаторы доступа надо было куда-то включить, вот и запихнули их в инкапсуляцию. Не в наследование же и полиморфизм их пихать.
    Ответ написан
    Комментировать
  • Как через cmd и терминал удалить из папки все файлы, кроме выбранных?

    @res2001
    Developer, ex-admin
    Набросаю схематично вариант без forfiles.
    Имеем текстовый файл file.txt со списком имен файлов, которые не надо удалять - одно имя файла на каждой строке.
    Получить список всех файлов в каталоге можно с помощью dir /b
    Далее этот список отфильтровать, исключая файлы, содержащиеся в file.txt, примерно так:
    dir /b c:\test\* | findstr /v /g:file.txt
    На выходе по идее должен быть список файлов, которые надо удалить.
    Эту команду запихнуть в
    for /f "tokens=* delims=" %%a in ('dir ... ^| findstr ...') do (del %%a)

    В принципе все.
    Проверить все сейчас не могу, т.к. под рукой нет винды, поэтому только общая идея, компоновать придется самому.
    За подробностями:
    dir /?
    for /?
    findstr /?
    del /?

    Рекомендую сначала выполнить связку dir | findstr вручную в консоли и добиться, что бы выдавался нужный результат (список файлов для удаления), только затем все это оформлять в батник.
    Ответ написан
  • Как выделить подстроку с числом с фиксированной точкой?

    @res2001
    Developer, ex-admin
    В string то же можно обращаться к отдельно взятому символу с помощью оператра индексации.

    Все просто: В цикле проходишь по строке ищешь "+" или "-" или "." или любую цифру.
    Если нашел что-то из этого списка, то натравливаешь на строку, начиная с этой позиции функцию strtod - она сконвертирует строку в double и вернет позицию первого не цифрового символа в строке. Полученное от strtod число вывести на экран. Продолжаешь поиск дальше, начиная с позиции, которую вернула strtod и так до конца искомой строки.
    Ответ написан
    2 комментария