亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1785 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號