免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1476 | 回复: 0
打印 上一主题 下一主题

[C] 求助这段代码是干吗的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-30 15:52 |只看该作者 |倒序浏览
在看源代码的时候发现这么一段函数,通过下面两句来调用。其中char_ofs是char[5];i是整形;cd->c是字符的UTF32LE编码;ofs是点阵数据偏移量。整形变量表示该字符是第i个,点阵数据存放在字符个数*5+前i-1个点阵数据长度总和的偏移量处。
下面两句产生的结果是,char_ofs[5]前两位变成cd->c;后三位成了偏移量的某种编码。
    add_bits(char_ofs, &i, 21, cd->c);
    add_bits(char_ofs, &i, 19, ofs);
     ofs += cd->data_len;
void add_bits(unsigned char *buf, int *buf_ptr, int bits, unsigned data)
{
  int rem, ptr;

  while(bits > 0) {
    ptr = *buf_ptr >> 3;
    rem = 8 - (*buf_ptr & 7);
    if(rem > bits) rem = bits;
    buf[ptr] = (buf[ptr] & ((1 << (*buf_ptr & 7)) - 1)) + ((data & ((1 << rem) - 1)) << (*buf_ptr & 7));
    *buf_ptr += rem;
    bits -= rem;
    data >>= rem;
  }
}



[ 本帖最后由 RobinHoo 于 2008-10-30 16:07 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP