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("");
出力:
field: 2000000000 vs input: 2000000000
必要な出力は「20000000」です。最初の8文字だけを取得するために2番目の操作を使用することを妨げるものは何もありませんが、フィールドの切り捨てはiomanipから本当に欠落していますか?Boostフォーマットは必要なことを1つのステップで実行しますか?