没有完全理解这部分代码
Not fully understanding this part of code
我最近遇到了这段代码,但我无法理解它。有人可以向我解释那里发生了什么吗?
union Color32
{
struct ARGB
{
uint8_t b;
uint8_t g;
uint8_t r;
uint8_t a;
} parts;
uint32_t argb;
Color32() : argb(0) {}
Color32(uint32_t c_argb) : argb(c_argb) {}
Color32(uint8_t a, uint8_t r, uint8_t g, uint8_t b)
{
parts.a=a;
parts.r=r;
parts.g=g;
parts.b=b;
}
};
ARGB 是一个由 4 个单位组成的结构,分别代表绿色、蓝色、红色和我不知道的颜色。
该结构是使用名称 parts 创建的,因此当您必须使用它时,您必须像:parts.r = 20 或 parts.g = 50.
然后它创建一个对象颜色,它可以包含 argb 的 4 个参数 (4*8 = 32)。
它用你给他的 4 个参数初始化了对象颜色 32:a,b,c,d
Color32(uint8_t a, uint8_t r, uint8_t g, uint8_t b)
{
parts.a=a;
parts.r=r;
parts.g=g;
parts.b=b;
}
要继续,您有一个名为 Color 的 32 位对象,其中包含来自结构部分的 4 个 8 位对象。
union
的成员共享存储空间。这与 struct
形成对比,其中每个成员都分配了不同的存储空间。
这段代码的效果是 ARGB
结构的成员 b
,g
,r
& a
与其他成员共享存储空间Color32
union
.
的成员 argb
所以设置argb
值的构造函数隐式设置b
,g
,r
& a
的值作为有序部分argb
.
的位模式
相反,b
、g
、r
& a
构造函数构建了 argb
.
的值
这里 'ARGB' 下的图表非常好地展示了这些部分如何 'packed' 变成 32 位块。
http://en.wikipedia.org/wiki/RGBA_color_space
我可能不需要解释 b
代表蓝色,g
绿色,r
代表红色,a
代表 alpha(又名透明度)!
如果有大端/小端可移植性的要求,您可能会遇到困难。
我最近遇到了这段代码,但我无法理解它。有人可以向我解释那里发生了什么吗?
union Color32
{
struct ARGB
{
uint8_t b;
uint8_t g;
uint8_t r;
uint8_t a;
} parts;
uint32_t argb;
Color32() : argb(0) {}
Color32(uint32_t c_argb) : argb(c_argb) {}
Color32(uint8_t a, uint8_t r, uint8_t g, uint8_t b)
{
parts.a=a;
parts.r=r;
parts.g=g;
parts.b=b;
}
};
ARGB 是一个由 4 个单位组成的结构,分别代表绿色、蓝色、红色和我不知道的颜色。 该结构是使用名称 parts 创建的,因此当您必须使用它时,您必须像:parts.r = 20 或 parts.g = 50.
然后它创建一个对象颜色,它可以包含 argb 的 4 个参数 (4*8 = 32)。
它用你给他的 4 个参数初始化了对象颜色 32:a,b,c,d
Color32(uint8_t a, uint8_t r, uint8_t g, uint8_t b)
{
parts.a=a;
parts.r=r;
parts.g=g;
parts.b=b;
}
要继续,您有一个名为 Color 的 32 位对象,其中包含来自结构部分的 4 个 8 位对象。
union
的成员共享存储空间。这与 struct
形成对比,其中每个成员都分配了不同的存储空间。
这段代码的效果是 ARGB
结构的成员 b
,g
,r
& a
与其他成员共享存储空间Color32
union
.
argb
所以设置argb
值的构造函数隐式设置b
,g
,r
& a
的值作为有序部分argb
.
相反,b
、g
、r
& a
构造函数构建了 argb
.
这里 'ARGB' 下的图表非常好地展示了这些部分如何 'packed' 变成 32 位块。
http://en.wikipedia.org/wiki/RGBA_color_space
我可能不需要解释 b
代表蓝色,g
绿色,r
代表红色,a
代表 alpha(又名透明度)!
如果有大端/小端可移植性的要求,您可能会遇到困难。