• Что делать, если не работает setlocale c++?

    maaGames
    @maaGames
    Погроммирую программы
    cpp файл сохранён в UTF-8 кодировке? И, кажется, вместо "rus" надо "Russian".
    Ответ написан
    7 комментариев
  • Гибридные, транковые порты на коммутаторах, это всё порты для коммутаторов? Не для конечных устройств?

    @kisaa
    Т.е. есть ли решение получить две сети на ПК, без установки второй сетевой карты или поднятия VPN на одной из этих сетей?

    Есть. Нужно ПО сетевой карты, поддерживающее вланы. Например, для десктопных реалтеков под Windows есть Realtek ethernet diagnostic utility, которая позволяет создать несколько виртуальных сетевых адаптеров, прописав каждому свой влан и адрес. Под линуксом это делается еще проще через настройки интерфейсов.
    Ответ написан
    Комментировать
  • Дисплеи одинаковой высоты win11?

    Установить для этих мониторов одинаковое разрешение.
    Ответ написан
    1 комментарий
  • Можете покритиковать мой код?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    1) (Вкусовщина) стиль наименования не самый удачный. И переменные и функции называются одинаково - каждое слово с большой буквы без разделителей. Во всех массово применяемых стилях обычно переменные, функции и константы называются по разному. Например, переменные можно называть log_password. Функции и так оставить с большой буквы, а константы - полностью большими буквами.

    2) обилие вложенных if. Практикуйте ранний выход. Например в Login() можно сделать так:
    if (Data.is_open()) {
      std::cout << "Ошибка. У вас нет аккаунта" << std::endl;
      return;
    }


    И весь оставшийся код оказывается на 1 уровень выше.

    3) Бесконечные рекурсивные вызовы - это плохо. Рано или поздно программа упадет с закончившимся стеком.
    У вас Menu вызывает Login, который опять вызывает Menu. Да и сам Menu тоже.

    Лучше сделать в Menu бесконечный цикл (while(true)) и или выходить из программы через exit(), или возвращать из Login, что надо завершаться и тогда в Menu делать break.
    Ответ написан
    1 комментарий
  • Как заставить IP камеру вести запись по движению если она находится в другой подсети отличной от подсети NVR?

    mikes
    @mikes
    если детекция движения по анализу картинки, то крутите настройки nvr
    если детекция в самой камере (изображение/сенсор) то смотрите включено ли в камере и есть ли логи о срабатывании.

    то что камера в другой сети (при условии маршрутизации + не запрещено каким нить firewall) не имеет значения
    Ответ написан
    1 комментарий
  • Привязаны ли номера портов к протоколам транспортного и прикладного уровня?

    @pfg21
    ex-турист
    протоколы не привязаны к портам.
    но есть официальные "дефолтные" рекомендации Список портов TCP и UDP.

    да. на любой порт, это просто номер квартиры где обитает конкретный сервис.
    к примеру, в давние времена слабых машин обычно на 80 порту работал многофункциональный апач, ворочавший php скриптами. а на порту 8080 висел какойнить легкий lighthttpd который быстро отдавал статические файлы (картинки).

    для tcp/udp "номер порта" это просто число в заголовке их пакета.
    tcp/udp , в принципе, формируют само понятие порта для более высших по стеку протоколов. так скажем, находятся на уровень "выше" чем порты.
    порты значимы лишь для протоколов, работающих через tcp/udp.
    другие протоколы, не завязанные на tcp/udp, вообще не будут ничего знать о портах. у них будут другие системы разграничений потоков данных.
    Ответ написан
    Комментировать
  • Насколько большую роль в IT-карьере играют связи?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Очень большую роль играют нейронные связи в мозгу. Чем их больше, тем лучше соображается, а в кодинге без этого никак. Остальные связи особого значения не имеют.
    Ответ написан
    4 комментария
  • Таненбаум или Олифер?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Если совсем с нуля - Олиферы, даром что учебное пособие :) А Танненбаум - на "второй проход". Там в общем-то все то же самое, но больше, подробнее, академичнее.

    "Роман классический, старинный, отменно длинный, длинный, длинный..." (С)
    Ответ написан
    1 комментарий
  • Как убрать системные прерывания?

    @Drno
    удалите драйвер на сетевую от винды(в диспетчере устройств
    скачайте драйвер нужный с сайта асус и установите
    https://www.asus.com/ru/SupportOnly/K52F/HelpDesk_...

    вариант 2 - помирает сетевуха - тогда можно купить сетевую карту USB
    Ответ написан
    9 комментариев
  • Как сделать, чтобы printf() заменял -nan на любой заданный символ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как сделать, чтобы вместо -nan печатался символ "-" ?

    Только добавив свою логику в свою программу, проверяющую значение на NaN и печатающую в зависимости от этого то или иное значение. С помощью стандартного printf -- никак.
    Ответ написан
    Комментировать
  • Как задать IP адреса и маски в этой сети?

    @Drno
    Я во второй раз вижу этот вопрос, и до сих пор не понимаю проблемы

    Датчики подключаются к инету через роутер, роутер их NATит в инет..
    все что надо - указать в датчиках внешний IP сервера... роутер их автоматом перекинет

    Если они к серверу должны стучаться внутри ВПН соединения, которое на роутере поднято, то укажите адрес сервера в сети ВПН и всё... ( в ESP)

    если же это одна локальная сеть - задайте ESP, ВИФИшке и серверу IP из одной подсети, выше уже пример указали
    например возьмите сеть 192.168.0.0/24
    Ответ написан
    2 комментария
  • Как задать IP адреса и маски в этой сети?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Классика

    Датчики с завода допустим идут с настройкой
    192.168.0.2
    Что вам нужно на роутере настроить
    192.168.0.1 отрубить dhcp задать маршруты до сервера с приложением влажности

    Далее настраиваете есп
    192.168.0.2
    192.168.0.3
    192.168.0.4
    192.168.0.5
    192.168.0.6
    192.168.0.7

    Гэйтвеем указываете 192.168.0.1
    Итого у вас

    Роутер 192.168.0.1 который роутит и вот этот адрес 172.27.1.12
    Датчики 192.168.0.2-192.168.0.7
    И сервер приложений 172.27.1.12

    Впрочем можете раздать сенсорам и их роутеру адреса из сетки 172.27.1.0/24
    Ответ написан
    Комментировать
  • Какие адреса из подсети 172.16.10.0 можно использовать для адресации?

    fzfx
    @fzfx
    18,5 дм
    Можно использовать адреса со 172.16.10.0 по 172.16.10.63. Потому что именно эти адреса входят в подсеть 172.16.10.0/26. Другие адреса в эту подсеть не входят. При наложении маски подсети на адрес подсети будет видно, какие биты адреса подсети относятся к адресу подсети, а какие к адресу хоста в подсети.
    Адрес 172.16.10.0 при этом является адресом самой подсети, адрес 172.16.10.63 - широковещательный адрес подсети, назначать эти два адреса машинам в этой подсети нельзя. Остальные адреса диапазона доступны для назначения машинам в этой подсети.
    Ответ написан
    1 комментарий
  • Как получить HMODULE импортированой dll без LoadLibraryA() или GetModuleHandleA()?

    @wishz Автор вопроса
    РЕШЕНИЕ:

    #include <Windows.h>
    #include <winternl.h>
    #include <cstdio>
    
    using namespace std;
    
    void get_by_peb()
    {
    	// Получаем указатель на PEB
    	// небольшой хак без какого либо импорта, чисто через asm получаем указататель на PEB структуру
    	PPEB peb = NULL;
    #ifdef _WIN64
    	peb = (PPEB)__readgsqword(0x60);
    #else
    	peb = (PPEB)__readfsdword(0x30);
    #endif
    	printf("PEB addr: [%p]\n", peb);
    	PPEB_LDR_DATA ldr = peb->Ldr;
    	PLIST_ENTRY startPos = &ldr->InMemoryOrderModuleList;
    	PLIST_ENTRY currPos = startPos->Flink;
    
    	int moduleCount = 0;
    	while (currPos != startPos) {
    		moduleCount++;
    		currPos = currPos->Flink;
    	}
    	printf("Modules count: [%d]\n", moduleCount);
    
    	currPos = currPos->Flink;
    	PLDR_DATA_TABLE_ENTRY pLdrEntry;
    	for (int i = 0; i < moduleCount; ++i) {
    		pLdrEntry = CONTAINING_RECORD(
    			currPos,
    			LDR_DATA_TABLE_ENTRY,
    			InMemoryOrderLinks);
    		printf(
    			"[%ls], BASE-ADDR: [0x%p], Entry-Point:[0x%p]\n",
    			pLdrEntry->FullDllName.Buffer,
    			pLdrEntry->DllBase,
    			pLdrEntry->Reserved3[0]
    		);
    
    		currPos = currPos->Flink;
    	}
    
    }
    
    int main(void) 
    {
    	
    	// Проверяем адрес
    	HMODULE dll_1 = GetModuleHandleA("KERNEL32.dll");
    
    	printf("--------------------\n");
    	printf("KERNEL32.dll :: [%p]\n", dll_1);
    	printf("main() :: [%p]\n", main);
    	printf("--------------------\n");
    	// Решение:
    	printf("--------------------\n");
    	get_by_peb();
    	printf("--------------------\n");
    
    	return 0;
    }


    62c348dec459d705410876.png

    Большая часть кода (оригинал): https://makestation.net/thread-3057.html
    Ответ написан
    1 комментарий
  • Как из vector с int8_t получить int число?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как получить то же самое в С++?

    например так:
    uint8_t foo[] = {7, 7};
    int i = foo[0] + 256 * foo[1];


    В js я могу получить это так
    Int8Array

    Скажи,
    - а что будет, если элемент массива foo будет иметь отрицательное значение?
    - а что будет, если твой код запустить на архитектуре с порядком байт big-endian?
    Ответ написан
  • Указатели в языке Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему программа завершилась? Вмешалась ОС? Но если так, то почему?

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

    Почему я не могу поменять значение самого указателя (ведь указатель - это всего лишь ссылка на адрес памяти, а не на значение).

    Значение указателя ты поменять можешь, но это не то, что было написано в коде. В коде было написано поменять значение на которое указатель указывает. Поменять указатель было бы a = (int *)10;

    могу ли я указателю дать ссылку на конкретную ячейку в памяти?

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

    получаю ошибку, ведь вряд ли адрес памяти у указателя хранится в виде 16-ричного целочисленного литерала.

    В памяти всё хранится как последовательность байтов. Любую последовательность байтов можно проинтерпретировать как указатель. Но чтобы компилятор С понял что ты имеешь в виду, ему надо явно сказать, что ты хочешь проинтерпретировать целое число как адрес: int *a = (int *)0x0061FF18;
    Ответ написан
    Комментировать
  • Что означает -'0' на C?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Это вычитание значения '0' из значения str[j]. И то и другое - символы, они же char. В языке Cи, это целочисленный тип. Просто каждому символу дается его ascii код.

    Тут это используется для получения численнного значения цифры из ее символьного значения, ведь символы '0'-'9' в ascii идут подряд в натуральном порядке.
    Ответ написан
    Комментировать
  • Как данные перемещаются в сети интернет, всегда конвертируются в кадры Ethernet или остаются в пакетах IP?

    CityCat4
    @CityCat4 Куратор тега Сетевое администрирование
    //COPY01 EXEC PGM=IEBGENER
    Олиферы прочитаны?

    Если нет, то тогда вот такая вот история:
    - ты берешь кило картошки и высыпаешь его в пакет, на котором пишешь "кило картошки"
    - потом упаковываешь это в другой пакет, на котором пишешь "квартира 29"
    - потом упаковываешь это в другой пакет, на котором пишешь "3-я ул. Строителей, дом 12"
    - потом упаковываешь это в другой пакет, на котором пишешь "В доставку" и зовешь курьера.

    Курьер приезжает в доставку и снимает свой пакет.
    Доставка видит адрес, довозит пакет до дома, передает его консьержу и снимает свой пакет
    Консьерж зовет коридорного, который подымает пакет к двери квартиры и снимает свой пакет, потом звонит в дверь
    Адресат открывает дверь и видит пакет с надписью "кило картошки".

    Разве картошка по пути следования в что-то "преобразовывалась"?
    Ответ написан
    5 комментариев
  • Можно ли сделать отдельный вывод в Microsoft Visual Studio 2021?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Программист управляет двумя потоками вывода текста. STDOUT и STDERR через функции printf(...) или через расширенную версию с указанием файлового дескриптора вывода fprintf( stderr, ....).

    При запуске в консоли вы можете указывать что например вывод ошибок идет в err.log и стандартный вывод в std.log
    application.exe > std.log 2>err
    (в данном случае двойка - это номер дескриптора STDERR. Есть альтерантивный синтаксис когда для STDOUT
    мы указываем единичку "1>std.log" но ее просто опускают поэтому синтаксис так странно отличается)

    Как поступает с обоими потоками среда - я не помню. Скорее всего она их объединяет. Поэтому запускайте в консоли.

    Это вобщем-то архитектура любого процесса Unix и Windows.
    Ответ написан
    2 комментария