C++ 重新解释C+中的铸造+; uint32\u t r,g,b; r=(uint32_t)145; g=(uint32_t)131; b=(uint32_t)139; uint32_t rgb=((uint32_t)r16)和0x0000ff; uint8_t gnew=(rgbnew>>8)和0x0000ff; uint8_t bnew=(rgbnew)和0x0000ff;
当我试图运行这段代码时,第行出现了分段错误C++ 重新解释C+中的铸造+; uint32\u t r,g,b; r=(uint32_t)145; g=(uint32_t)131; b=(uint32_t)139; uint32_t rgb=((uint32_t)r16)和0x0000ff; uint8_t gnew=(rgbnew>>8)和0x0000ff; uint8_t bnew=(rgbnew)和0x0000ff;,c++,pointers,pointer-conversion,C++,Pointers,Pointer Conversion,当我试图运行这段代码时,第行出现了分段错误 uint32_t rgb=((uint32_t)r请尝试编译包含所有警告和调试信息的代码(例如,在Linux上使用g++-Wall-g),并对其进行改进,直到没有警告。学习使用调试器(例如,在Linux上使用gdb) 我想这可能是因为 uint32_t r,g,b; r = (uint32_t)145; g = (uint32_t)131; b = (uint32_t)139; uint32_t rgb = ((uint32_t)r <
uint32_t rgb=((uint32_t)r请尝试编译包含所有警告和调试信息的代码(例如,在Linux上使用
g++-Wall-g
),并对其进行改进,直到没有警告。学习使用调试器(例如,在Linux上使用gdb
)
我想这可能是因为
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;
当我有
g++-4.7 -std=c++11 -Wall -g ramji.cc -o ramji
#包括
#包括
int main(int argc,字符**argv)
{
uint32_t r,g,b;
r=(uint32_t)145;
g=(uint32_t)131;
b=(uint32_t)139;
std::请告诉您使用的编译器(和版本)以及目标系统。同时给出编译标志。您是否尝试隔离此代码段并查看发生了什么?我将这段代码放在一个简单的主函数中,没有segfault。我猜在uint32_t rgb=((uint32_t)中显式转换为uint32
)R
g++-4.7 -std=c++11 -Wall -g ramji.cc -o ramji
#include <cstdint>
#include <iostream>
int main(int argc, char**argv)
{
uint32_t r,g,b;
r = (uint32_t)145;
g = (uint32_t)131;
b = (uint32_t)139;
std::cout << "r=" << r << " g=" << g << " b=" << b << std::endl;
uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b);
std::cout << "rgb=" << rgb << std::endl;
float rgbf = *reinterpret_cast<float*>(&rgb);
std::cout << "rgbf=" << rgbf << std::endl;
uint32_t rgbnew = *(reinterpret_cast<uint32_t *>(&rgbf));
std::cout << "rgbnew=" << rgb << std::endl;
uint8_t rnew = (rgbnew >> 16) & 0x0000ff;
uint8_t gnew = (rgbnew >> 8) & 0x0000ff;
uint8_t bnew = (rgbnew) & 0x0000ff;
std::cout << "rnew=" << rnew << " gnew=" << gnew
<< " bnew=" << bnew << std::endl;
return 0;
}