Я огляделся по сторонам и не смог найти решения для хранения того, что возвращается из формата boost в массив char. Например:
#include "stdafx.h"#include <iostream>
#include <boost/format.hpp>
int main()
{
unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };
char buf[1024];
buf[] = boost::format("%02X-%02X-%02X-%02X-%02X") // error on this line
% arr[0]
% arr[1]
% arr[2]
% arr[3]
% arr[4];
system("pause");
return 0;
}
Я получаю ошибку:
ошибка: ожидалось выражение
Я не знаю, пропускаю ли я простое решение, но мне нужен const char * взамен. Существует большое количество кода, который сейчас нельзя переписать. Я работаю над VS2013 C ++
Вы можете использовать array_sink из boost iostreams:
#include <iostream>
#include <boost/format.hpp>
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>
namespace io = boost::iostreams;
int main()
{
unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };
char buf[1024];
io::stream<io::array_sink> as(buf);
as << boost::format("%02X-%02X-%02X-%02X-%02X")
% arr[0]
% arr[1]
% arr[2]
% arr[3]
% arr[4];// to print `buf`:
std::cout.write(buf, as.tellp());
}
Печать
05-04-AA-0F-0D
Вы могли бы использовать Формат C ++ как более быстрая альтернатива Boost Format. Это позволяет форматировать непосредственно в массив символов:
#include "format.h"
int main()
{
unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };
char buf[1024];
fmt::ArrayWriter writer(buf);
writer.write("{:02X}-{:02X}-{:02X}-{:02X}-{:02X}",
arr[0], arr[1], arr[2], arr[3], arr[4]);
}
или, что еще лучше, он может автоматически распределять массив (в этом случае он будет полностью размещен в стеке, поэтому не будет потери производительности по сравнению с фиксированным буфером):
#include "format.h"
int main()
{
unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };
fmt::MemoryWriter writer;
writer.write("{:02X}-{:02X}-{:02X}-{:02X}-{:02X}",
arr[0], arr[1], arr[2], arr[3], arr[4]);
}
Библиотека использует Python-подобный синтаксис строки формата, хотя и безопасна printf
реализация также предоставляется.
отказЯ автор этой библиотеки.