PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 如何將整個陣列的資料進行位移?
作者:
handofn0xus
(你真是糟糕的小焰)
2023-02-07 11:27:24
最近遇到需要把Bitmap中的資料進行位移的情況
Bitmap是以char*的形式進行儲存
今天我想做的事是
以下列為例:
char bitmap[]={0xA5,0x05,0x05}
1. 我今天想從bitmap[0]的第五個位元進行右移2
2. 同時bitmap[2]的資料不會因為右移而消失 而是到bitmap[3]
也就是結果會變成
{0xA1,0x41,0x41,0x40}
2.可以透過realloc解決 所以不算是問題
但是1.我就不知道該怎麼下手了 我實在不知道怎麼把不同元素的資料位移到下個元素去
而資料不會消失
想請教各位先進 要怎麼樣才能達到我想要的效果呢?
作者:
terter
(terter)
2023-02-07 11:59:00
一時想到比較笨的方法是,從最後解。假設原陣列A,新陣列BB[3]=A[2]<<6, B[2]=A[1}<<6+A[2}>>2想了一下,好像用型別轉換去作比較快,一次可以處理多個譬如說用uint64這種
作者:
Lipraxde
(Lipraxde)
2023-02-07 15:27:00
有更完整的使用情境嗎?
作者:
lwecloud
(CloudEX)
2023-02-07 15:28:00
tmp = bitmap[i] & 0xFC;bitmap[i] = (bitmap[i] >> 6) & 0x3F;bitmap[i] |= (remain << 6) & 0xC0;remain = tmp;這樣呢? (用推文好難打 囧)第一行就錯了 tmp = bitmap[i] & 0x3; 才對...陽春做法,搞不好有些library可以直接做到
作者:
leolarrel
(真.粽子無雙)
2023-02-07 17:37:00
terter的型別轉換法目前看起來最快最簡潔
作者:
don323
(咚薯叔)
2023-02-08 08:13:00
類似二樓的寫法就是最快的,客製化各種運算
作者:
johnjohnlin
(嗯?)
2023-02-08 21:47:00
char不小心shift太多會UB,最好先轉unsigned戳到MSB變1會是UB
作者: yesiah
2023-02-09 11:50:00
stackoverflow 有類似的討論
https://stackoverflow.com/q/70043899
看了一下有兩個方向一個是想辦法用SIMD instructions,另一個是一邊寫loop一邊看assembly有沒有良好vectorize第二個方法可能要加__restrict讓compiler知道src跟dst不重疊,所以他可以做更多最佳化
作者: longlongint (華哥爾)
2023-04-09 23:03:00
如果要平行化 又不用省空間的話 掛一層f(idx)就可以分段copy了
繼續閱讀
[問題] 呼叫字串陣列並輸出
devcc
[問題] spinlock問題
gn00618777
[問題] std::thread+functor
Keitaro
[問題] callback function如何 try catch?
soufon
[問題]迴圈下 syntax error問題
RichieRich
[問題] 詢問 C 語言的問題 & 學習資源請教
allencheng
Re: [問題] big endian中bit field 的問題
descent
[問題] big endian中bit field 的問題
ca5270
[心得] write debugger 初探
descent
[問題] vscode c++ debug doesn’t work
hardman1110
Links
booklink
Contact Us: admin [ a t ] ucptt.com