首页 > 解决方案 > 如何确保在 C++ 中只输出 6 位、0 填充的十六进制值?

问题描述

基本上,我试图在给定红色、绿色和蓝色的值的情况下生成十六进制值...我能够将所有内容转换为十六进制,但我希望结果是用 0 填充的 6 位十六进制数如果只有 4 个输出数字。

这是我所拥有的:”

int main() {
stringstream hexstring;
int red,green,blue;
cout << "Red: ";cin >> red;
cout << "Green: ";cin >> green;
cout << "Blue: ";cin >> blue;

hexstring << hex << setfill('0')  << setw(6) << uppercase << red << green  << blue;

cout << "#" << hexstring.str();



}

这是当我使用 0 表示红色、1 表示绿色和 43 表示蓝色时的输出:

Red: 0
Green: 1
Blue: 43
#00000012B

这增加了 6 个零,因为我的 setw 是 6。我可以将其设置为 2 个零以获得总共 6 位数字,但是如果我更改红色、绿色、蓝色的值,我还必须更改 setw 的值...

如何使其始终为 255 内的所有值输出 6 位数字?

标签: c++stringhexstringstream

解决方案


setw仅影响下一个输出字段

你可能想写的是:

hexstring << hex << setfill('0') << uppercase
          << setw(2) << red
          << setw(2) << green
          << setw(2) << blue;

推荐阅读