В C ++ мне нужны строковые представления целых чисел с ведущими нулями, где представление имеет 8 цифр и не более 8 цифр, при необходимости обрезая цифры с правой стороны. Я думал, что смогу сделать это, используя только ostringstream и iomanip.setw (), вот так:
int num_1 = 3000;
ostringstream out_target;
out_target << setw(8) << setfill('0') << num_1;
cout << "field: " << out_target.str() << " vs input: " << num_1 << endl;
Вывод здесь:
field: 00003000 vs input: 3000
Очень мило! Однако, если я попытаюсь увеличить число, setw позволит выводить больше 8 символов:
int num_2 = 2000000000;
ostringstream out_target;
out_target << setw(8) << setfill('0') << num_2;
cout << "field: " << out_target.str() << " vs input: " << num_2 << endl;
out_target.str("");
выход: * +1010 *
field: 2000000000 vs input: 2000000000
Требуемый выход «20000000». Ничто не мешает мне использовать вторую операцию, чтобы взять только первые 8 символов, но действительно ли в iomanip отсутствует усечение поля? Будет ли форматирование Boost делать то, что мне нужно, за один шаг?