为了账号安全,请及时绑定邮箱和手机立即绑定

C++ unsigned char* 转 int*,操作符重载,隐式类型转换

C++ unsigned char* 转 int*,操作符重载,隐式类型转换

C++
慕姐8265434 2018-07-22 09:30:25
unsigned char * data; data是内存连续的数组,size很长,需要转换成 int * ints;其中 每三个char组合一个int比如ints[0] = (data[0]<< 16) | (data[1]<< 8 ) | data[2] ;我不希望用for循环遍历算出来,以及频繁的内存拷贝操作,效率太低下面是我没走通的路子:typedef struct int24 {     uchar r, g, b;     operator int() {             return b | (g << 8) | (r << 16);     } } unsigned char * data = ... int24 * tmp = (int24 * ) data; int *  ints = (int * ) tmp;使用int * ints = (int * ) tmp毫无意义,还是指针转换,没能应用到重载操作符类型转换最终结果是得到int * ,是否有别的方法?望指教。
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

24bit写来写去效率都不可能高,因为数据不对齐。底层硬件就决定了这一点,在c++层面折腾只是徒劳。
数据不对齐意味着产生的机器指令的load/store都是交错的,完全浪费了cpu的fetch
需要搞清楚你的上层需求,然后完整地考虑这个问题。

查看完整回答
反对 回复 2018-07-24
  • 1 回答
  • 0 关注
  • 1669 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信