На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> sprintf , C++
    всем привет, как вот это сделать на C++ ?
    ExpandedWrap disabled
       sprintf(mac_addr, "%02X-%02X-%02X-%02X-%02X-%02X",
              pAdapterInfo->Address[0], pAdapterInfo->Address[1],
              pAdapterInfo->Address[2], pAdapterInfo->Address[3],
              pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
      Чётъмолчат все. Вот, влобное:
      ExpandedWrap disabled
            std::ostringstream buf;
         
            buf.setf(std::ios::hex, std::ios::basefield);
            buf.setf(std::ios::uppercase);
            buf.fill('0');
         
            buf.width(2); buf << pAdapterInfo->Address[0] << '-';
            buf.width(2); buf << pAdapterInfo->Address[1] << '-';
            buf.width(2); buf << pAdapterInfo->Address[2] << '-';
            buf.width(2); buf << pAdapterInfo->Address[3] << '-';
            buf.width(2); buf << pAdapterInfo->Address[4] << '-';
            buf.width(2); buf << pAdapterInfo->Address[5];
         
            std::string mac_addr = buf.str();
      Вот в один оператор:
      ExpandedWrap disabled
            std::string mac_addr = static_cast<std::ostringstream&&>(
                   std::ostringstream() << std::hex << std::setfill('0') << std::uppercase
                                        << std::setw(2) << pAdapterInfo->Address[0] << '-'
                                        << std::setw(2) << pAdapterInfo->Address[1] << '-'
                                        << std::setw(2) << pAdapterInfo->Address[2] << '-'
                                        << std::setw(2) << pAdapterInfo->Address[3] << '-'
                                        << std::setw(2) << pAdapterInfo->Address[4] << '-'
                                        << std::setw(2) << pAdapterInfo->Address[5]
                                                                    ).str();
      Если вдруг pAdapterInfo->Address имеет неподходящий тип, то нужен ещё каст к int.
      Если компилятор у тебя держит C++20, то вот так ещё можно:
      ExpandedWrap disabled
            std::string mac_addr = std::format("{:02X}-{:02X}-{:02X}-{:02X}-{:02X}-{:02X}",
                                               pAdapterInfo->Address[0], pAdapterInfo->Address[1],
                                               pAdapterInfo->Address[2], pAdapterInfo->Address[3],
                                               pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
      но я пока таких не встречал.
        Цитата Qraizer @
        Если вдруг pAdapterInfo->Address имеет неподходящий тип, то нужен ещё каст к int.

        нет не имеет,

        Добавлено
        Цитата Qraizer @
        Чётъмолчат все.

        потому не знают, привыкли к Си и живут как после свадьбы католической ;)

        Добавлено
        Цитата Qraizer @
        Если компилятор у тебя держит C++20, то вот так ещё можно:
        ExpandedWrap disabled
              std::string mac_addr = std::format("{:02X}-{:02X}-{:02X}-{:02X}-{:02X}-{:02X}",
                                                 pAdapterInfo->Address[0], pAdapterInfo->Address[1],
                                                 pAdapterInfo->Address[2], pAdapterInfo->Address[3],
                                                 pAdapterInfo->Address[4], pAdapterInfo->Address[5]);
        но я пока таких не встречал.

        gcc не пойдет? а clang ?
          Пока <format> никто не поддерживает. Там, как бы, работы много по реализации, и её ещё нужно хорошенько протестировать.
            Цитата Qraizer @
            Пока <format> никто не поддерживает. Там, как бы, работы много по реализации, и её ещё нужно хорошенько протестировать.

            Больше чем в сишной функции? И что мешает ее просто обернуть ?
              Больше. К тому же они не эквивалентны. Посмотри в format library
                Цитата Qraizer @
                Больше. К тому же они не эквивалентны. Посмотри в format library

                Я счас осваиваю Cyber, пока хочу поменять MAC address, platform independent, мне нужен Boost? или обычного Си вполне хватит?
                  Откуда ж я знаю. Так-то хватит и ассемблера...
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0319 ]   [ 16 queries used ]   [ Generated: 19.04.24, 01:36 GMT ]