免费注册 查看新帖 |

Chinaunix

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

[函数] [请教]一个看不懂的函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-03 16:26 |只看该作者 |倒序浏览
今天看到下面这个函数

  1. int util_64to256(char *dst, char *src, char *table)
  2. {
  3.   unsigned int dw,dwcounter,i;
  4.   char *ptr = NULL;

  5.   dw=0;
  6.   dwcounter=0;
  7.   if (!dst || !src || !table) return 0;
  8.   for (i=0; i<strlen(src); i++) {
  9.     ptr = (char *) index(table, src[i]);
  10.     if (!ptr) return 0;
  11.     if (i%4) {
  12.       dw = ((unsigned int)(ptr-table) & 0x3f) << ((4-(i%4))*2) | dw;
  13.       dst[ dwcounter++ ] = dw & 0xff;
  14.       dw = dw >> 8;
  15.     } else {
  16.       dw = (unsigned int)(ptr-table) & 0x3f;
  17.     }
  18.   }
  19.   if (dw) dst[ dwcounter++ ] = dw & 0xff;
  20.   dst[ dwcounter ] = '\0';
  21.   return dwcounter;
  22. }
复制代码


百思不得其解,想不明白为何要如此转换?感觉好像涉及到加密解密的知识,实在是无法理解,请高手赐教

指点一下这段代码是想用来做什么的,大致的功能及设计思路又是什么呢

[ 本帖最后由 sa101 于 2007-9-6 16:16 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-09-03 16:42 |只看该作者
不熟悉这代码的人还真看不懂,你看不懂去看它干什么

论坛徽章:
0
3 [报告]
发表于 2007-09-03 17:06 |只看该作者
原帖由 flw2 于 2007-9-3 16:42 发表
不熟悉这代码的人还真看不懂,你看不懂去看它干什么



没看之前哪知道看不懂

就是看了很久才发现自己看不懂啊,所以希望能有高手指点一下,积累点知识

起码自己已经看了很久了,想必学习起来比看书要容易了

论坛徽章:
0
4 [报告]
发表于 2007-09-04 14:55 |只看该作者
回空了一个,不好意思。请版主删除。

[ 本帖最后由 naihe2010 于 2007-9-4 15:04 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-09-04 14:58 |只看该作者
大概是要根据table字符串,对src进行转换。

但是,感觉有几处问题,根本不可能转换成功。

1。for (i=0; i<strlen(src); i++) {
每次循环都要计算一次字符串长度,太浪费了。
2。index(table, src);
index的第一个参数是字符串指针,第二个应该是一个字符。而这个,显然第二个参数有误,并且,顺序或者其它方面也有问题吧,调用这么多次,全是一样的值啊,干嘛呢?

[ 本帖最后由 naihe2010 于 2007-9-4 15:13 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-09-04 15:25 |只看该作者
base64解码
1,table应该是base64码表,
2,index应该是计算表中字符地址,
3,ptr-table应该是计算base64值,结果是6位的,
4,这个函数只能内部使用,因为strlen计算不一定对,base64可能会含有换行"\n"或者"\r\n",也是正确的,但是这个函数处理的话,就失败了,想必“if (!ptr) return 0;”
5,如果很大数据需要解码怎么办?显然这个函数搞不定。base64可以做成流式处理。
6,参考 RFC3548 (http://rfc.net/rfc3548.html)

论坛徽章:
0
7 [报告]
发表于 2007-09-04 15:38 |只看该作者
原帖由 spibit 于 2007-9-4 15:25 发表
base64解码
1,table应该是base64码表,
2,index应该是计算表中字符地址,
3,ptr-table应该是计算base64值,结果是6位的,
4,这个函数只能内部使用,因为strlen计算不一定对,base64可能会含有换行"\n"或 ...

刚想说,似乎是编码程序……(不过看到index函数中src始终未变,觉得不对,应该每次指向下一个字符)
学习了

论坛徽章:
0
8 [报告]
发表于 2007-09-04 15:54 |只看该作者
flw2 的回答越来越牛叉啊

论坛徽章:
0
9 [报告]
发表于 2007-09-04 17:16 |只看该作者
原帖由 silasoni 于 2007-9-4 15:54 发表
flw2 的回答越来越牛叉啊


要不然就不是flw 2了。

论坛徽章:
0
10 [报告]
发表于 2007-09-04 20:04 |只看该作者
不理解啥意思,我的意思是我看不懂,而且确实很难看懂.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP