- 论坛徽章:
- 0
|
在看源代码的时候发现这么一段函数,通过下面两句来调用。其中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 编辑 ] |
|