sm8*_*095 2 c++ struct pointers casting c++11
使用C++(特别是GCC,应该更早地提出这个),我将原始纹理数据存储在RGBA格式的无符号字节数组中,每像素32位(每个颜色值8位,带Alpha,等等等等)向前...).问题是,我想编写一个函数,将原始数据作为一个Colors数组返回,其中Color是一个结构,定义如下:
struct Color
{
uint8 r;
uint8 g;
uint8 b;
uint8 a;
};
Run Code Online (Sandbox Code Playgroud)
加上函数和诸如此类的东西,但这些是结构中唯一的变量.我的想法是,由于每种颜色长度为4个字节,我可以以某种方式将原始字节数组转换为原始大小的1/4的Color数组(在数组的"长度"中,而不是绝对大小).我认为reinterpret_cast是我正在寻找的东西,但在谷歌搜索确认100%你可以将它转换为结构数组而不是只有一个结构后,我找不到任何东西.
所以我想我只是要求某人确认这确实是可能的reinterpret_cast,或者是否有不同的演员或方式来做到这一点.谢谢.
编辑:我的措辞有点奇怪,所以作为一个任意的例子,我想以某种方式将16个无符号字节的数组转换为4种颜色的数组.
编辑:我也知道它有点晚了,但我似乎无法找到如何使用reinterpret_cast在特定位置将一小部分数组转换为单个结构,如果可能的话,而不复制到较小的数组和那样的铸造.因此,对此问题的任何帮助也将不胜感激.
作为一个任意的例子,我想以某种方式将16个无符号字节的数组转换为4种颜色的数组.
像这样:
#pragma pack(push, 1)
struct Color
{
uint8 r;
uint8 g;
uint8 b;
uint8 a;
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
uint8 bytearray[16];
...
Color *colorarray = reinterpret_cast<Color*>(bytearray);
Run Code Online (Sandbox Code Playgroud)
然后你可以做这样的事情:
for (int idx = 0; idx < 4; ++idx)
{
Color &c = colorarray[idx];
// use c.r, c.g, c.b, c.a as needed...
}
Run Code Online (Sandbox Code Playgroud)