我有一个缓冲区unsigned char table [512],我希望将其更快地转换为short int table [256]的表,其中每个位置都是表的字节的复合。
我有一个相机给我这个缓冲区,它是将视差转换为真实深度的表。
unsigned char zDtable[512] = {0};
unsigned short int zDTableHexa[256]={0};
.. get the buffer data.....
for (int i = 0; i < 256; ++i) {
zDTableHexa[i]=zDtable[i*2]<<8 + zDtable[i*2+1];
}
这两个在转换好值时存在问题,字节反转:
memcpy(zDTableHexa_ptr,zDtable,256*sizeof( unsigned short int));
unsigned short* zDTableHexa = (unsigned short*)zDtable;
答案 0 :(得分:-1)
尝试这样的事情
short* zDTableHexa = (short*)zDtable;
它只是将char数组的内存空间映射到short数组。所以如果内存看起来像这样: (char0),(CHAR1),(CHAR2),(CHAR3)
然后它将被重新解释为 (short0 = char0,char1),(short1 = char2,char3)
请注意,这种直接的重新解释取决于字节顺序,并且正式允许一个足够迂腐的编译器来执行不正常的事情,即它是系统和编译器特定的。