请问下面代码这样做的目的是什么?

MorningTea 2006-07-13 02:11:55
DestXE是图象的宽度
SrcBpp即为系统内置的颜色位数
nDstLineBytes = (int) ((( (DWORD) DestXE * SrcBpp + 7L) / 8L + 3L) & 0xFFFCL);
请教大家,我看不懂,这个是在计算存放图片的内存大小时候用到,别人的代码
...全文
281 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MorningTea 2006-07-14
  • 打赏
  • 举报
回复
谢谢,明天加班我就认真看看:-)
ckp 2006-07-13
  • 打赏
  • 举报
回复
nDstLineBytes = (int) ((( (DWORD) DestXE * SrcBpp + 7L) / 8L + 3L) & 0xFFFCL);
+7再/8,相当于是将数据作8字节的对齐。
例如:
1,2,3,4,5,6,7,8,9,10
10个数,(10+7)/8以后,结果2。也就是说,10个数,正好可以填入2组8字节的内存单元。
+ 3L) & 0xFFFCL);
FFFC的二进制的最低4位为1100。
也就是说与FFFC按位进行与运算后,结果正好是4的整数倍。
MorningTea 2006-07-13
  • 打赏
  • 举报
回复
55,我还是不懂
我不明白要这样做?
就是为什么要+7 然后/8,为什么不其他呢?,还有后面为什么要如此计算呢?
ddstudent 2006-07-13
  • 打赏
  • 举报
回复
比如说 1 - 8 bit, 如 +7/8 全部 = 1 byte

比如说最后的 1-4 bytes, +3 再 &0xfffc 会从下一个 4bytes 的啟始点开始
jixingzhong 2006-07-13
  • 打赏
  • 举报
回复
+7 +3是对齐操作
=========
可能这么说会容易误解,
看这句话下面的解释吧, 呵呵
jixingzhong 2006-07-13
  • 打赏
  • 举报
回复
SrcBpp 是位数, 不是字节数,所以有一个 /8L (长整数)

+7 +3是对齐操作,
/8L 前+7 是防止非整字节位丢失,比如DestXE * SrcBpp 出来的位数不能被 8 整除,后面存在一些非整字节位,那么直接 /8L 会丢失这个部分, +7后 /8L 可以保留;

+3 在 & 0xFFFCL 之前是类似的效果 ...
MorningTea 2006-07-13
  • 打赏
  • 举报
回复
楼上说的我不懂,55
有没有简单例子解释给我看看,谢谢
ddstudent 2006-07-13
  • 打赏
  • 举报
回复
看起來看是做一些位置的排正 +7/8 , +3, 最后再 &0xfffc 就是边界为 4 的倍数

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧