Microsoft создала статью TechNet, в которой обсуждается их продукт режима приложений Active Directory (ADAM) , и в ней есть раздел, в котором сравниваются различия между каталогами и базами данных. Следующее взято непосредственно с сайта.
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;
}
Только при использовании 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"
Это должно помочь вам получить то, что вам нужно.
Модуль форматирования Boost учитывает форматирование printf. Вы пробовали:
const string formatter = "%02x-%02x-%02x-%02x-%02x";
?
Может также захотеть добавить «hh» перед x, чтобы указать, что значение составляет 8 бит.