【问题标题】:How can I make sure I only output a 6-digit, 0-padded hexadecimal value in C++?如何确保在 C++ 中只输出 6 位、0 填充的十六进制值?
【发布时间】:2019-04-28 15:54:26
【问题描述】:

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

这是我所拥有的:"

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 位数字?

【问题讨论】:

  • setw()的设置只适用于下一个值输出..尝试输出setw(2) &lt;&lt; red &lt;&lt; setw(2) &lt;&lt; green &lt;&lt; setw(2) &lt;&lt; blue

标签: c++ string hex stringstream


【解决方案1】:

setw 影响only the next output field

你可能想写的是:

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

【讨论】:

  • 这似乎解决了我的问题!我不知道 setw 仅适用于下一个输出。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-09-07
  • 2021-11-13
  • 2017-06-08
  • 2017-01-18
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
相关资源
最近更新 更多