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
需要搞清楚你的上層需求,然后完整地考慮這個問題。
- 1 回答
- 0 關注
- 1785 瀏覽
添加回答
舉報
0/150
提交
取消