Как произвести шестнадцатеричный вывод с повышением:: формат?

Microsoft создала статью TechNet, в которой обсуждается их продукт режима приложений Active Directory (ADAM) , и в ней есть раздел, в котором сравниваются различия между каталогами и базами данных. Следующее взято непосредственно с сайта.

Каталоги

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

Базы данных

  • Оптимизированы для операций записи.
  • Проектирование реляционных данных. Данные организованы в таблицы строк и столбцов. Данные из одной таблицы могут быть связаны с данными в другой таблице.
  • Используются стандартизированные, расширяемые схемы.
  • Предназначен для централизованного хранения и администрирования данных.
  • Менее точная защита, только до уровня строк и столбцов.
  • Транзакционная - гарантированная согласованность данных. Ссылочная целостность в реляционных таблицах и управление параллелизмом с блокировкой файлов и записей.

6
задан Andreas Haferburg 22 November 2016 в 16:53
поделиться

3 ответа

Compiled and tested:

#include <boost/format.hpp>
#include <iostream>

using namespace std;
using namespace boost;

int main()
{
    unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };

    cout << format("%02X-%02X-%02X-%02X-%02X")
                % arr[0]
                % arr[1]
                % arr[2]
                % arr[3]
                % arr[4]
         << endl;
}
9
ответ дан 8 December 2019 в 18:37
поделиться

Только при использовании iostream это можно сделать, управляя потоком вывода. Следующий простой пример показывает, что можно сделать.

#include <iostream>
#include <iomanip>

unsigned char a = 0x05;
unsigned char b = 0xA8;

using namespace std;

int main()
{    
    std::cout << setbase(16) << setfill('0') << setw(2) <<
         (short)a << "-" << (short)b << std::endl;
}

Результатом будет: 05-a8

Boost :: format также позволяет использовать те же манипуляторы формата.

Пример примера со страницы boost :: format ] иллюстрирует его использование.

using boost::format;
using boost::io::group;
// Using manipulators, via 'group' :
cout << format("%2% %1% %2%\n")  % 1   % group(setfill('X'), hex, setw(4), 16+3) ;
// prints "XX13 1 XX13\n"

Это должно помочь вам получить то, что вам нужно.

2
ответ дан 8 December 2019 в 18:37
поделиться

Модуль форматирования Boost учитывает форматирование printf. Вы пробовали:

const string formatter = "%02x-%02x-%02x-%02x-%02x";

?

Может также захотеть добавить «hh» перед x, чтобы указать, что значение составляет 8 бит.

2
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: