Задать вопрос
  • Взаимодействие уровней сетевых моделей?

    saboteur_kiev
    @saboteur_kiev Куратор тега Компьютерные сети
    software engineer
    А что ты уже читал хотябы в википедии?

    Ну вот например протокол низкого уровня - мы по кабелю пересылаем данные при помощи дискретного сигнала. Это же явно уровень ниже, чем HTTP
    или вместо кабеля на каком-то этапе нам нужно перейти на wifi, и передавать данные уже радиоволной, со своими особенностями, синхронизацией сигнала, отвержением отраженных повторений.

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

    @pfg21
    ex-турист
    резистор проволочный низкоомный.
    наверное все таки не ноль. для перемычки уж слишком круто.

    посмотри по остаткам цветовой кодировки.
    предположу по цветам
    первое кольцо - (крайнее правое) красный (2) или коричневый (1)
    второе кольцо не четко видно хотя и не особо влияет - черный??? (0)
    третье кольцо видно четко - черное - ноль или множитель 10^0=1
    четвертое кольцо не видно изза гари - черное??? - множитель 10^0=1
    полследннее кольцо не может быть черным - нет цвета точности.
    итого 20 или 10 ом вполне нормально длят токоограничения.

    но надо сильно поковырять цвета, они толи обгорели, толи пеплом покрыты. играйся :)
    Ответ написан
    4 комментария
  • Чем обусловлены различия в работе со строками и другими массивами?

    @res2001
    Developer, ex-admin
    void func()
    {
    char str1[] = "Hello";
    const char* str2 = "Hello";
    int* mas1 = { 4, 5, 7, 9 };  // compile error
    int mas2[] = { 4, 5, 7, 9 };
    char* str3 = {'s', 't', 'r', '3', '\0'};  // compile error
    char str4[] = {'s', 't', 'r', '4', '\0'};
    ...
    }

    Объявление str1 и str2 это не совсем одно и то же.
    str1 выделяет на стеке массив charов подходящего размера и копирует в этот массив строку "Hello". Строка "Hello" до копирования будет хранится в сегменте памяти для констант (rodata), который сформируется ОС автоматически при загрузку исполняемого файла в память. Таким образом строка str1 лежит полностью на стеке, ее можно изменять при желании, но увеличивать размер нельзя. str1 может быть как константной строкой, так и не константной.
    str2 - на стеке выделяется память под указатель, указателю присваивается адрес строки "Hello", которая все так же лежит в сегменте rodata. Поэтому const тут необходим, т.к. оригинальная строка, на которую ссылается str2 не изменяемая. Если убрать const у str2, то, например, gcc выдаст предупреждение по умолчанию, но код скомпилирует. Если дальше попытаться изменить str2 (например str2[0] = 'h';), то компилятор на присвоение уже ничего не скажет, т.к. str2 уже не константная строка, но при выполнении получишь segfault, т.к. пытаешься изменить read-only память.
    В случае инициализации mas1, выражение в фигурных скобках - это список инициализации. На основании списка инициализации компилятор генерирует код, который при выполнении проинициализирует массив mas1, т.е. он не генерирует массив, он генерирует код, что-то типа такого mas1[0] = 4; mas[1] = 5; ... при этом компилятор подразумевает, что память под mas1 уже должна быть выделена подходящего объема. Но в примере mas1 - это не массив - это указатель, который никуда не ссылается. Инициализировать указатель таким образом не возможно. Нужно делать так, как показано для mas2.
    Точно так же списком инициализации можно проинициализировать и массив для строки (str3) и получить ту же ошибку, что и для mas1.
    Из примеров можно сделать вывод, что для строк в языке существует специальный синтаксис, который больше нигде не применим - пример str2. Это так и есть.

    Сырые строки (Си строки, ASCIIZ строки, строки оканчивающиеся нулем) ни разу не устаревшие. Объект string, конечно удобный и прочее, но он медленный из-за того, что хранит свою строку в динамической памяти, и при изменении строки перевыделяет память по мере надобности и копирует строку в новую память. Операции выделения/удаления динамической памяти очень дорогие. Чаще всего string - вполне адекватный выбор, но там где нужна быстра работа со строками лучше поискать другие варианты, например сырые строки.
    В С++17 появился std::string_view - это обертка над константной сырой строкой, делает код немного более понятным, но не производит никаких манипуляций с динамической памятью - ему на вход надо дать сырую строку. Он ее и использует для своих операций. Из-за того, что string_view не изменяет свою строку и не манипулирует с памятью - он работает быстрее, но у него ограниченное количество операций - отсутствуют операции модифицирующие строку.
    Ответ написан
    3 комментария
  • Как разделить строку до и после определённого символа?

    @res2001
    Developer, ex-admin
    Вариант с "токенизацией" делит один единственный буфер на несколько Си строк, т.е. там просто записывается завершающий 0 вместо разделителей. Это быстро и довольно просто, ничего никуда не копируется, дополнительная память не выделяется. Но надо иметь ввиду, что используется один и тот же буфер и если вы его не аккуратно перезапишите (не важно по какому указателю на внутренние строки), то ваши строки "испортятся". Освобождая память под этим буфером надо, естественно, по указателю на начало буфера, а не по указателю на произвольную строку внутри буфера. Освободив буфер надо иметь ввиду, что все строки, содержащиеся в буфере то же освободились.

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

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

    Если же вам надо только "вывести подстроку", то можно просто искать позицию разделителя, с его помощью вычислять размер левой подстроки и используя printf("%*s", len, leftstr); выводить левую подстроку. Дальше сохраняем указатель на начало правой подстроки, ищем от него следующий разделитель, то, что раньше было правой подстрокой становится левой, точно так же выводим и т.д. в цикле.
    Вместо printf можно выводить так: cout << setw(len) << leftstr;
    Ответ написан
    Комментировать
  • Маршрутизация на пк или 6 сетевых интерфейсов?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Для начала решить, что так жить нельзя и закопать, наконец, стюардессу :) Windows - однопользовательская развлекательная система, не наждо тащить ее в роль сервера видеонаблюдения.

    Поставить роутер с PoE, настроить на нем маршрутизацию, подключить винду в один из интерфейсов.
    Ответ написан
    Комментировать
  • Возможно ли каким то образом заразить свой ПК собственным вирусом?

    @Drno
    а почему нет? достаточно его запустить
    Ответ написан
    Комментировать
  • Какой максимальный ток может проходить через кнопку, рассчитаную на 0.5A 50V, если напряжение цепи 5V?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Напряжение на кнопках указывают для определения изолирующих (в разомкнутом состоянии) и искрогасящих параметров кнопки. Чем больше напряжение, тем больший зазор нужно делать между контактами.
    Ток же определяет какой будет нагрев в замкнутом состоянии. Кнопка - это не нагревательный прибор, у нее должно быть миимально енапряжение и в замкнутом виде она делает короткое замыкание. На её контактах в замкнутом виде не может быть ни 50 ни 5 вольт. Если на контактах замкнутой кнопки 5 вольт, то кнопка неисправна, у нее плохой контакт и по ней шпарит ток, гораздо выше озвученного.

    Ещё раз. На кнопке или любом выключателе либо напряжение (в разомкнутом виде), либо через нее течет ток (в замкнутом состоянии).
    Мощность на ней может какая-то рассеиваться, но уж точно не 25 ватт. Там будут миливатты.
    Ответ написан
    3 комментария
  • На чем программируют электронные устройства для техники?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Почти весь embed, и гражданский, и военный, пишется на C.
    Ответ написан
    Комментировать
  • Каким образом можно увеличить выходное напряжение без превышения уровня напряжения двоичного кода на ЦАП с резисторной матрицей R-2R?

    @Akela_wolf
    Extreme Programmer
    Поставьте на выход R2R операционный усилитель и получите совершенно произвольное напряжение на выходе (в пределах выходного диапазона ОУ). Операционный усилитель имеет еще такой немаловажный плюс, что R2R чувствителен к сопротивлению нагрузки, чем меньше сопротивление, тем больше напряжение на выходе будет "плавать". ОУ обладает очень высоким входным сопротивлением, поэтому в паре с R2R будет работать просто замечательно.

    Статья на хабре

    Я так полагаю, вам подойдет самая простая схема - неинвертирующий усилитель.
    Ответ написан
  • Не сохранился черновик статьи, что делать?

    Adler_lug
    @Adler_lug
    В следующий раз писать статью сперва в Word или блокноте...
    Ответ написан
    4 комментария
  • Как в ардуино включить светодиод при поступающем аналоговом значение которое больше (0-1024) 500 в течении 5 секунд?

    nava2002
    @nava2002
    Инженер
    Учитывая простоту вопроса по моему, кто то пытается сделать домашнее задание.
    Это программа на 4 оператора.
    Ответ написан
    Комментировать
  • Можно ли объеденить hdd последовательно?

    gbg
    @gbg Куратор тега Железо
    Любые ответы на любые вопросы
    Это вы видели историческое видео про винты с интерфейсом IDE. Это было в далекие времена, в далекой галактике. Сейчас все очень просто: один порт контроллера - один накопитель.

    Есть еще вариант, что это были внешние диски и IEE1394, но это тоже предания старины глубокой
    Ответ написан
    6 комментариев
  • Как найти неизвестные параметры функции, зная ее значения?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Поскльку у вас уже жестко задан вид функции, то это задача на минимизацию функции ошибки (от n и k). Обычно мнимизируют сумму квадратов ошибок по всем примерам.

    Аналитически, как в методе наименьших квадратов, приравнять производные по n и k к 0 похоже не очень получается. Придется использовать какой-то численный метод минимизации функции. Например, градиентный спуск или метод ньютона. Если похоже, что функция имеет множество локальных минимумов, то будет работать что-то более хитрое, как например, метод отжига.
    Ответ написан
    Комментировать
  • Как считать права доступа? Как мне право такого вида "drwx------" перевести в числовой формат (типа 777)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    r w x | - - - | - - -
    4+2+1 | 0+0+0 | 0+0+0
        7       0       0


    r w x | r - x | r - x
    4+2+1 | 4+0+1 | 4+0+1
        7       5       5
    Ответ написан
    Комментировать
  • Как настроить ping между компьютерами внутри Openvpn?

    @mureevms
    1. Проверить есть ли к конфиге OpenVPN параметр client-to-client
    2. Проверить FORWARD правила фаервола, должно быть разрешающее между подсетями
    Ответ написан
    7 комментариев
  • Столкнулся с непонятным - откуда лишние 00000002?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Ответ написан
    Комментировать
  • Сколько стоит робот доставщик от Яндекса?

    У того, что нельзя купить, цены нет.
    Ответ написан
    Комментировать
  • Как определить к какому типу принадлежит демультиплексор? И как их отличать по схеме?

    @pfg21
    ex-турист
    Не аналоговый :)
    Обычный Преобразователь hex-dec
    Ответ написан
    Комментировать