如何确保在 C++ 中只输出 6 位、0 填充的十六进制值?
How can I make sure I only output a 6-digit, 0-padded hexadecimal value in C++?
基本上,我正在尝试根据红色、绿色和蓝色的值生成十六进制值...我能够将所有内容转换为十六进制,但我希望结果是一个 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 位数字的总数,但是如果我更改红色、绿色、蓝色的值,我还必须更改设置...
如何让它始终为 255 以内的所有值输出一个 6 位数字?
setw
影响 only the next output field。
您可能想写的是:
hexstring << hex << setfill('0') << uppercase
<< setw(2) << red
<< setw(2) << green
<< setw(2) << blue;
基本上,我正在尝试根据红色、绿色和蓝色的值生成十六进制值...我能够将所有内容转换为十六进制,但我希望结果是一个 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 位数字的总数,但是如果我更改红色、绿色、蓝色的值,我还必须更改设置...
如何让它始终为 255 以内的所有值输出一个 6 位数字?
setw
影响 only the next output field。
您可能想写的是:
hexstring << hex << setfill('0') << uppercase
<< setw(2) << red
<< setw(2) << green
<< setw(2) << blue;