Формат Boost дает различный вывод для одинаковых строк

Фон

Я использую увеличить формат библиотеки отформатировать некоторый текст. Мой вклад uint8_t массив. Это код, который я использовал:

#include <array>
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
#include <boost/format.hpp>

int main(int ac, const char * av[]){

std::string nameStr = "HENLO FREN";
std::array<uint8_t, 30> nameArr={0x48, 0x45, 0x4e, 0x4c, 0x4f, 0x20, 0x46, 0x52, 0x45, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
std::string convertedStr(std::begin(nameArr), std::end(nameArr));

std::cout << "nameStr.size():" << nameStr.size() << ", nameStr.length():" << nameStr.length() << ", nameStr:" << nameStr << std::endl;
std::cout << "convertedStr.size():" << convertedStr.size() << ", convertedStr.lenght():" << convertedStr.length() << ", convertedStr:" << convertedStr << std::endl;

std::ostringstream oss;
oss << boost::format("%-24s%c%-10d%8s") % nameStr % "#" % 512 % "999";

std::cout << oss.str() + '\n';

oss.str(std::string());

oss << boost::format("%-24s%c%-10d%8s") % convertedStr % "#" % 512 % "999";

std::cout << oss.str() + '\n';

return 0;
}

вопрос

Код выше производит этот вывод:

nameStr.size():10, nameStr.lenght():10, nameStr:HENLO FREN
convertedStr.size():30, convertedStr.lenght():30, convertedStr:HENLO FREN
HENLO FREN              #512            999
HENLO FREN#512            999

oss << boost::format("%-24s%c%-10d%8s") % convertedStr % "#" % 512 % "999"; дает другой вывод & опускает -24 и немедленно начинает следующие части.

я догадывался эта длина массива была больше, чем спецификатор длины формата, может вызвать это, поэтому я изменил -24 в -40 в обеих строках формата. Это вывод:

nameStr.size():10, nameStr.lenght():10, nameStr:HENLO FREN
convertedStr.size():30, convertedStr.lenght():30, convertedStr:HENLO FREN
HENLO FREN                              #512            999
HENLO FREN          #512            999

Вопрос

Что-то не так с моим кодом?

Как я могу отформатировать строку, преобразованную из uint8_t массив правильно?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector