C_and_CPP 板


LINE

最近遇到需要把Bitmap中的资料进行位移的情况 Bitmap是以char*的形式进行储存 今天我想做的事是 以下列为例: char bitmap[]={0xA5,0x05,0x05} 1. 我今天想从bitmap[0]的第五个位元进行右移2 2. 同时bitmap[2]的资料不会因为右移而消失 而是到bitmap[3] 也就是结果会变成 {0xA1,0x41,0x41,0x40} 2.可以透过realloc解决 所以不算是问题 但是1.我就不知道该怎麽下手了 我实在不知道怎麽把不同元素的资料位移到下个元素去 而资料不会消失 想请教各位先进 要怎麽样才能达到我想要的效果呢? --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.130.45.59 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1675740450.A.E41.html ※ 编辑: handofn0xus (220.130.45.59 台湾), 02/07/2023 11:28:29
1F:→ terter: 一时想到比较笨的方法是,从最後解。假设原阵列A,新阵列B02/07 11:59
2F:→ terter: B[3]=A[2]<<6, B[2]=A[1}<<6+A[2}>>202/07 12:00
我刚刚发文後也想到这个方法 目前也是先用这样的方法去写 但不知道有没有更简单的方式能达成目标 尤其是要应付大量 资料的情况
3F:→ terter: 想了一下,好像用型别转换去作比较快,一次可以处理多个 02/07 12:07
4F:→ terter: 譬如说用uint64这种 02/07 12:08
谢谢 这样确实能提升一些速度 不过还是想问问看 假设我的bitmap有e.g. 超过1000个index 这样即使用uint64还是会需要重复好几遍 真的没有办法是可以直接对整个阵列所有位元进行移动的方法吗?
5F:→ Lipraxde: 有更完整的使用情境吗? 02/07 15:27
6F:推 lwecloud: tmp = bitmap[i] & 0xFC; 02/07 15:28
7F:→ lwecloud: bitmap[i] = (bitmap[i] >> 6) & 0x3F; 02/07 15:29
8F:→ lwecloud: bitmap[i] |= (remain << 6) & 0xC0; 02/07 15:30
9F:→ lwecloud: remain = tmp; 02/07 15:30
10F:→ lwecloud: 这样呢? (用推文好难打 囧) 02/07 15:31
11F:→ lwecloud: 第一行就错了 tmp = bitmap[i] & 0x3; 才对... 02/07 15:32
12F:→ lwecloud: 阳春做法,搞不好有些library可以直接做到 02/07 15:42
能大概了解你想表达的意思 感谢
13F:→ leolarrel: terter的型别转换法目前看起来最快最简洁 02/07 17:37
14F:推 don323: 类似二楼的写法就是最快的,客制化各种运算 02/08 08:13
※ 编辑: handofn0xus (220.130.45.59 台湾), 02/08/2023 15:55:39
15F:推 johnjohnlin: char不小心shift太多会UB,最好先转unsigned 02/08 21:47
16F:→ johnjohnlin: 戳到MSB变1会是UB 02/08 21:48
17F:→ yesiah: stackoverflow 有类似的讨论 02/09 11:50
18F:→ yesiah: https://stackoverflow.com/q/70043899 02/09 11:50
19F:→ yesiah: 看了一下有两个方向 02/09 11:50
20F:→ yesiah: 一个是想办法用SIMD instructions,另一个是一边写loop一 02/09 11:50
21F:→ yesiah: 边看assembly有没有良好vectorize 02/09 11:50
22F:→ yesiah: 第二个方法可能要加__restrict让compiler知道src跟dst不重 02/09 11:50
23F:→ yesiah: 叠,所以他可以做更多最佳化 02/09 11:50
24F:→ longlongint: 如果要平行化 又不用省空间的话 挂一层f(idx) 04/09 23:03
25F:→ longlongint: 就可以分段copy了 04/09 23:04







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP