gpt4 book ai didi

c - 有没有办法在 c 中创建自定义类型转换?

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:54 25 4
gpt4 key购买 nike

我有 2 个自定义类型:

struct RGB {
int8_t R;
int8_t G;
int8_t B;
}
typedef int24_t color;

我有一个函数可以将 RGB 转换为 color:

color GetColor (RGB rgb) {
return (int24_t)rgb.R*256*256+(int24_t)rgb.G*256+(int24_t)rgb.B;
}

有没有一种方法可以定义一个新的类型转换,将 RGB 变量转换为 color 类型会自动使用我的函数?

这样我就可以使用:

RGB c1;
color c2;
...
c2=(color)c1; //c2=GetColor(c1);

最佳答案

没有。没有。如果不想调用该函数,可以将 GetColor 转换为宏:

#define GET_COLOR(x) ((x).R*256*256 + (x).G*256 + (x).B)

RGB c1;
color c2;

c2 = GET_COLOR(c1);

这种特殊情况的另一种方法是将两个结构放在一个 union 中。

但是,由于对齐、填充等原因,这是否有效在很大程度上取决于您的编译器/机器。这可能不可移植,因此不鼓励。

你已经被警告过,这里有例子:

struct RGB {
int8_t R;
int8_t G;
int8_t B;
}
typedef int24_t color;

typedef union _u_color {
RGB rgb;
color c24;
} u_color;

你可以做的

RGB   c1 = {0x00, 0xFF, 0xAA};
u_color mycolor;
mycolor.rgb = c1;
c2 = mycolor.c24;

关于c - 有没有办法在 c 中创建自定义类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24693217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com