#include <stdio.h>
// 定义结构体
typedef struct {
unsigned int red : 8; // 8位表示红色分量
unsigned int green : 10; // 10位表示绿色分量
unsigned int blue : 6; // 6位表示蓝色分量
} RGBStruct;
// 将RGB值存入结构体的函数
void setRGB(RGBStruct *rgb, unsigned int r, unsigned int g, unsigned int b) {
rgb->red = r & 0xff;
rgb->green = g & 0x3ff;
rgb->blue = b & 0x3f;
}
// 从结构体中取出RGB值的函数
void getRGB(const RGBStruct *rgb, unsigned int *r, unsigned int *g, unsigned int *b) {
*r = rgb->red;
*g = rgb->green;
*b = rgb->blue;
}
int main() {
RGBStruct myRGB;
unsigned int r, g, b;
setRGB(&myRGB, 100, 200, 50);
getRGB(&myRGB, &r, &g, &b);
printf("Red: %u, Green: %u, Blue: %u\n", r, g, b);
return 0;
}
- 结构体定义:使用
typedef
定义了一个名为RGBStruct
的结构体,其中red
用8位表示,green
用10位表示,blue
用6位表示。
setRGB
函数:该函数接受一个RGBStruct
指针以及红、绿、蓝三个分量值,将这些值存入结构体相应的位域中,并且通过按位与操作确保值不会超出位域的范围。
getRGB
函数:该函数接受一个const RGBStruct
指针以及三个用于存储红、绿、蓝分量值的指针,从结构体中取出相应的值并存储到对应的指针指向的变量中。
main
函数:测试了上述两个函数,设置RGB值并取出打印。