用SETW证明文本是合理的
justify text with setw
我想像这样证明输出文本
0x29823d80 0x10019b8 / 0 00000000000000000000000000000001
0x37449e60 0x10dfc / 12 00000000000000000001000000000000
但是,使用此语句
fout << std::setw(5) << std::hex << "0x" << (*it).addr << " "
<< std::setw(5) << std::hex << "0x" << (*it).pc << std::setw(10) << "/" << std::setw(5) << std::dec << (*it).off << "t"
<< std::setw(5) << (*it).layout << "n";
我明白了:
0x29823d80 0x10019b8 / 0 00000000000000000000000000000001
0x37449e60 0x10dfc / 12 00000000000000000001000000000000
来自此参考:
此值不是"粘性":由流的宽度字段值影响的下一个输入或输出操作,将其重置为零(含义为"未指定")。
这意味着您要做的setw
是针对字符串"0x"
而不是实际的十六进制号。您必须在要合理的输出之前使用setw
。
编辑:解决问题的一种解决方案是使用包含领先"0x"
的临时字符串,而使用这些字符串的格式:
std::ostringstream val1, val2;
val1 << "0x" << std::hex << (*it).addr;
val2 << "0x" << std::hex << (*it).pc;
fout << val1.str() << " " << val2.str()
<< std::setw(10 + 10 - val2.str().length())
<< '/' ...
上面的 10 + 10 - val2.str().length()
表达式我从中得到:
- 第一个
10
,因为您似乎想要数字和斜线之间的10个空间 - 第二个
10
,因为这允许8个十六进制数字(32位)加上领先的"0x"
- 调整数字字符串的实际长度
您可以在此处使用此方法看到一个示例。
我知道这可能不是您所追求的,但请记住,C
主要是C++
的子集,尤其是您具有可用函数FPRINTF,这更适合比C++
I/O设施格式化简单的字符串和数字。因此,您只需写下:
fprintf(file, "%10p %10p / %5d %dn", it->addr, it->pc, it->off, it->layout);
如有疑问,请使用更多setw
!另外,您可以使用setfill
使数字看起来更漂亮:
std::cout << "0x"
<< std::hex << std::setfill('0') << std::setw(10) << (*it).addr
<< std::setw(5) << std::setfill(' ') << "0x"
<< std::hex << std::setfill('0') << std::setw(10) << (*it).pc
<< std::setw(10) << std::setfill(' ') << "/"
<< std::dec << std::setw(5) << (*it).off
<< std::setw(33) << (*it).layout
<< std::endl;
生产:
0x0029823d80 0x00010019b8 / 0 00000000000000000000000000000001
0x0037449e60 0x0000010dfc / 12 00000000000000000001000000000000
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何根据单词在文本中出现的概率输出单词
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 用SETW证明文本是合理的
- C++ 使用 setw 的文本格式不适用于 QT 的 QTextEdit