#include<iostream> using namespace std; void main() { //--------------PCD文件RGB字段的拆包和加包------------ //加包(已知RGB,求float) int r=109,g=114,b=134; int rgb = ((int)r << 16 | (int)g << 8 | (int)b); float frgb = *reinterpret_cast<float*>(&rgb); cout<<"frgb="<<frgb<<endl <<"rgb="<<rgb<<endl <<"r="<<r<<endl <<"g="<<g<<endl <<"b="<<b<<endl; //拆包(已知float,求RGB) int nrgb = *reinterpret_cast<int*>(&frgb); int nr = (nrgb >> 16) & 0x0000ff; int ng = (nrgb >> 8) & 0x0000ff; int nb = (nrgb) & 0x0000ff; cout<<"frgb="<<frgb<<endl <<"nrgb="<<rgb<<endl <<"nr="<<r<<endl <<"ng="<<g<<endl <<"nb="<<b<<endl; }
XYZRGB型的PCD文件数据格式为
X Y Z rgb
前三个都好说,最后一个rgb是用一个float来表示的,原本存储三个颜色信息的数值用一个数据来表示,明显是用到了位储存,所以考虑位操作。做了一个简单的VC程序,不做多的解释。
运行结果: