std::ios_base 提供格式控制机制,通过 setf/unsetf 设置进制、浮点、布尔等格式标志,width 和 fill 控制宽度与填充,precision 调整精度,影响后续输出格式。

在C++文件I/O中,std::ios_base 提供了控制输入输出格式的底层机制。它定义了格式化标志(format flags)、字段宽度、填充字符和浮点数表示方式等,这些功能通过继承到
std::ios并在
std::istream和
std::ostream中使用。
设置格式标志(Format Flags)
std::ios_base::fmtflags 是控制格式的核心。常用标志包括:
- std::ios_base::dec:十进制
- std::ios_base::hex:十六进制
- std::ios_base::oct:八进制
- std::ios_base::scientific:科学计数法
- std::ios_base::fixed:定点表示法
- std::ios_base::boolalpha:输出布尔值为 true/false 而非 1/0
- std::ios_base::showpos:为正数显示加号
- std::ios_base::uppercase:使用大写字母(如 A-F 在 hex 中)
使用
setf()设置标志,
unsetf()清除标志:
#include#include std::ofstream file("output.txt"); file.setf(std::ios_base::hex, std::ios_base::basefield); // 设置进制为十六进制 file.setf(std::ios_base::showbase); // 显示进制前缀(如 0x) file.setf(std::ios_base::uppercase); // 大写输出 file << 255 << '\n'; // 输出 0XFF file.unsetf(std::ios_base::uppercase); // 关闭大写
控制字段宽度与填充
使用
width()设置下一个输出项的最小字段宽度,
fill()设置填充字符:
立即学习“C++免费学习笔记(深入)”;
file.width(10);
file.fill('0');
file << 42 << '\n'; // 输出 "0000000042"
注意:
width()是一次性设置,只影响下一次输出操作。
浮点数格式控制
通过组合
fixed和
scientific控制浮点数输出样式:
file.setf(std::ios_base::fixed, std::ios_base::floatfield); file << 3.14159265 << '\n'; // 输出 3.141593(默认6位小数) file.precision(8); file << 3.14159265 << '\n'; // 输出 3.14159265
precision()设置有效数字位数或小数点后位数,具体取决于浮点格式。
布尔值格式化
默认布尔值输出为 1 和 0。启用
boolalpha可输出文字形式:
file.setf(std::ios_base::boolalpha); file << true << ' ' << false << '\n'; // 输出 true false
基本上就这些。通过 std::ios_base 提供的接口,可以精细控制文件I/O的输出格式,适用于日志、数据导出等需要格式一致性的场景。不复杂但容易忽略的是,很多设置是状态持续的,需注意重置或保存原始状态。










