#include <stdint.h>
#include <iostream>
int main()
{
//定义RGB分量
uint8_t r = 174, g = 64, b = 254;
//使用位运算符将三个unint8合并成一个uint32——t
uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
static_cast<uint32_t>(g) << 8 |
static_cast<uint32_t>(b));
//将调用reinterpret将uint32转为float
float rgbf = *reinterpret_cast<float*>(&rgb);
rgb = *reinterpret_cast<uint32_t*>(&rgbf);//为什么要转换两边,不是很清楚
//解析出rgb分量
uint8_t rr = (rgb >> 16) & 0x0000ff;
uint8_t gg = (rgb >> 8) & 0x0000ff;
uint8_t bb = (rgb) & 0x0000ff;
std::cout << "r通道复原为"<<rr <<std::endl;
std::cout << "g通道复原为" << gg << std::endl;
std::cout << "b通道复原为" << bb << std::endl;
system("pause");
return 0;
}
#include <iostream>
int main()
{
//定义RGB分量
uint8_t r = 174, g = 64, b = 254;
//使用位运算符将三个unint8合并成一个uint32——t
uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
static_cast<uint32_t>(g) << 8 |
static_cast<uint32_t>(b));
//将调用reinterpret将uint32转为float
float rgbf = *reinterpret_cast<float*>(&rgb);
rgb = *reinterpret_cast<uint32_t*>(&rgbf);//为什么要转换两边,不是很清楚
//解析出rgb分量
uint8_t rr = (rgb >> 16) & 0x0000ff;
uint8_t gg = (rgb >> 8) & 0x0000ff;
uint8_t bb = (rgb) & 0x0000ff;
std::cout << "r通道复原为"<<rr <<std::endl;
std::cout << "g通道复原为" << gg << std::endl;
std::cout << "b通道复原为" << bb << std::endl;
system("pause");
return 0;
}