unsigned char * data; data是內(nèi)存連續(xù)的數(shù)組,size很長,需要轉(zhuǎn)換成 int * ints;其中 每三個char組合一個int比如ints[0] = (data[0]<< 16) | (data[1]<< 8 ) | data[2] ;我不希望用for循環(huán)遍歷算出來,以及頻繁的內(nèi)存拷貝操作,效率太低下面是我沒走通的路子: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毫無意義,還是指針轉(zhuǎn)換,沒能應(yīng)用到重載操作符類型轉(zhuǎn)換最終結(jié)果是得到int * ,是否有別的方法?望指教。
1 回答

繁花不似錦
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個贊
24bit寫來寫去效率都不可能高,因?yàn)閿?shù)據(jù)不對齊。底層硬件就決定了這一點(diǎn),在c++層面折騰只是徒勞。
數(shù)據(jù)不對齊意味著產(chǎn)生的機(jī)器指令的load/store都是交錯的,完全浪費(fèi)了cpu的fetch
需要搞清楚你的上層需求,然后完整地考慮這個問題。
- 1 回答
- 0 關(guān)注
- 1765 瀏覽
添加回答
舉報
0/150
提交
取消