背景:一开始开发C++都是用的C语言的格式化sprintf,后来了解到可以通过cout和stringstream个格式化
输出终端格式化:
setw(int):为设置宽度
setfill(char):为填充的字符串
都在iomanip的头文件中
#include <iostream>
#include <iomanip>
using namespace std;
void main(){
int data = 0x01020304;
cout << hex << setw(8)<< setfill('0') << data << endl;
int data_2 = 8;
cout << hex << setw(8) << setfill('0') << data_2 << endl;
cout << hex << setw(7) << setfill('0') << data_2 << endl;
cout << setw(6) << setfill('1') << data_2 << endl;
getchar();
return;
}
变量格式化:可以把long型格式化为16进制的字符串,并且可以设置宽度和填充字符
#include <sstream>
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main() {
long number = 0x232234234;
std::stringstream duration_format;
duration_format << hex << setw(5) << setfill('0') << number;
cout << duration_format.str() << endl;
}
注意:
- 如果setw()里的数值小于实际的输出宽度时,宽度设置无效,可以使用 (number & 0x0FFFF)来对齐。
- setw默认是右对齐,如果想要左对齐,需要添加setiosflags(ios::left)来实现输出左对齐。
https://blog.youkuaiyun.com/weixin_44091134/article/details/88372309