【发布时间】:2013-01-05 13:37:25
【问题描述】:
uint32_t r,g,b;
r = (uint32_t)145;
g = (uint32_t)131;
b = (uint32_t)139;
uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b);
float rgbf = *reinterpret_cast<float*>(&rgb);
uint32_t rgbnew = *(reinterpret_cast<uint32_t *>(&rgbf));
uint8_t rnew = (rgbnew >> 16) & 0x0000ff;
uint8_t gnew = (rgbnew >> 8) & 0x0000ff;
uint8_t bnew = (rgbnew) & 0x0000ff;
当我尝试运行此代码时,行出现分段错误
uint32_t rgb = ((uint32_t)r
事实上,在某个地方运行良好。在另一个地方它给出了段错误。
【问题讨论】:
-
请告知您使用的是哪个编译器(和版本),以及针对哪个目标系统。还要给出编译标志。
-
您是否尝试隔离此 sn-p 并查看会发生什么?我把这个确切的代码放在一个简单的 main 函数中,没有段错误。
-
我想在
uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b);中对uint32的显式转换是不需要的,因为您将r、g和b声明为uint32。是否有需要它们的地方,因为这些变量具有不同的类型?
标签: c++ pointers pointer-conversion