使用C++(具体来说,应该把这个更早),我将原始纹理数据存储在无符号字节数组中,以RGBA格式存储,每像素32位(8使用Alpha的每个颜色值的位数,等等等等......)。关键是,我想写一个返回原始数据作为阵列的色彩,其中一个颜色定义为下面的一个结构的函数:将无符号字节数组转换为Structs数组
struct Color
{
uint8 r;
uint8 g;
uint8 b;
uint8 a;
};
加上功能和诸如此类的东西,但这些都是唯一的变量在结构中。我的想法是,由于每种颜色都是4字节长,我可以以某种方式将原始字节数组转换为原始大小的1/4(颜色数组的长度,而不是绝对大小)的颜色数组。我认为reinterpret_cast是我正在寻找的东西,但是在谷歌搜索之后我找不到任何东西,它确认100%可以将它转换为一个结构数组而不是一个结构。
所以我想我只是要求别人确认这确实可能与reinterpret_cast
,或者如果有不同的演员或方式来做到这一点。谢谢。
编辑:我的措辞有点奇怪,所以作为一个任意的例子,我想以某种方式将16个无符号字节的数组转换为4种颜色的数组。
编辑:另外我知道它有点晚了,但我似乎无法找到如何将数组的一小部分在一个特定的地方使用reinterpret_cast铸造到一个单一的结构,如果这是可能的,而不需要复制到一个更小的阵列并像这样投射。所以对这个问题的任何帮助也将不胜感激。
除了'uint8'没有指定标准型,你可能会因为你想要做的事而成为_padding_的受害者。你应该非常确定你必须申请一个'reinterpret_cast <>',否则你的冰箱可能爆炸或者可能发生任何其他意外(==未定义)的行为! –
您可以通过简单排除所有其他类型的演员来到达“reinterpret_cast”选项。 Const_cast,static_cast和dynamic_cast在你的情况下肯定不起作用。 – Oleg
抱歉应该更具体。我有一个全局包含文件,它将uint8定义为'uint8_t',它在GCC(也可能是其他人,但我只使用GCC)中定义为'unsigned char',我使用GCC。 – sm81095