我目前正在尝试通过在线教程学习c ++。本教程向我展示了如何使用SDL2创建程序,我在其中一个涉及十六进制位移的教程中迷失了方向。当我使用Visual Studio社区2017时,讲师正在使用Eclipse IDE。基本上我正在尝试做的是“cout”输出:FF123456使用他在教程中演示的代码。
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
//0xFF123456 we want the resulting hexadecimal below to look like the one up here using the unsigned chars and build it sequentially byte after byte
unsigned char alpha = 0xFF;
unsigned char red = 0x12;
unsigned char blue = 0x34;
unsigned char green = 0x56;
unsigned char color = alpha;
color += alpha;
color <<= 8; //moves all the values in the color by 8 bits to the left
color += red;
color <<= 8;
color += blue;
color <<= 8;
color <<= green;
cout << setfill('0') << setw(8) << hex << color << endl;
return 0;
}
但是,每次运行程序时,cout只会显示“0000000”而不是FF123456。我有什么问题或错过了吗?
答案 0 :(得分:0)
你的color
是一个无符号字符,代表一个字节,而不是四个字节。因此,每个班次<<= 8
实际上将删除之前分配的任何内容。
对unsigned int
使用uint32_t
或更好的color
类型。此外,您使用color
的值初始化alpha
,然后再次添加alpha
。建议使用color
初始化0
:
uint32_t color = 0;
color += alpha;
color <<= 8; //moves all the values in the color by 8 bits to the left
color += red;
color <<= 8;
color += blue;
color <<= 8;
color += green;
cout << setfill('0') << std::uppercase << setw(8) << hex << color << endl;
输出:
FF123456
BTW:修正拼写错误,将color <<= green
更改为color += green
。
而且,对于ge FF123456
而不是ff123456
,我添加了std::uppercase
。