免费注册 查看新帖 |

Chinaunix

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

[函数] 请路过的帮我看看这个函数是什么意思,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-12 15:40 |只看该作者 |倒序浏览
函数如下:
char buf[1024];
int    ptr = -1;
static void    parse_hex(unsigned int value)
{
    int i = 8;
    while (i-- > 0) {
        buf[ptr++] = "0123456789abcdef"[(value>>(i*4))&0xf];
    }
}
请解释 buf[ptr++] = "0123456789abcdef"[(value>>(i*4))&0xf];含义,谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-07-12 15:51 |只看该作者

回复 #1 gygy1607 的帖子

取value的最低4bit位组的值作为数组"0123456789abcdef"的索引,保存到buf里

论坛徽章:
0
3 [报告]
发表于 2007-07-12 15:53 |只看该作者
本帖最后由 guanmj 于 2016-08-02 15:54 编辑

dddddddddd

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2007-07-12 15:55 |只看该作者
原帖由 gygy1607 于 2007-7-12 15:40 发表
函数如下:
char buf[1024];
int    ptr = -1;
static void    parse_hex(unsigned int value)
{
    int i = 8;
    while (i-- > 0) {
        buf[ptr++] = "0123456789abcdef"[(value>>(i*4))&0xf] ...

看来很多人对这种表达方式存在疑惑。

论坛徽章:
0
5 [报告]
发表于 2007-07-12 16:06 |只看该作者
本帖最后由 guanmj 于 2016-08-02 15:52 编辑


dddddddddd

论坛徽章:
0
6 [报告]
发表于 2007-07-12 17:00 |只看该作者
发表于 2007-7-12 15:51
取value的最低4bit位组的值作为数组"0123456789abcdef"的索引,保存到buf里


我还是不明白,当这个函数运行时,是不是这样的:
1、生成了一个名为“0123456789abcdef"的数组;
2、每次(共8次)取value的最低4bit位组的值,即(value>>(i*4))&0xf),作为数组"0123456789abcdef"的索引。
到这里我就不明白通过个索引如何取到以这个索引为下标对应的值?
可能表达的不是很清楚,谢谢!

论坛徽章:
0
7 [报告]
发表于 2007-07-12 22:48 |只看该作者
相当于
char TMP[16]="0123456789abcdef"; //有错,主要表达意思
int index;
index = value>>(i*4)&0xf;  //二进制为00001111
char buf = TMP[index];

论坛徽章:
0
8 [报告]
发表于 2007-07-12 22:51 |只看该作者
我的问题是
ptr初始值为-1;
那么buf[ptr++]的时候,应该是先运算再++
那岂不是buf的索引是从-1开始??
解答下

论坛徽章:
0
9 [报告]
发表于 2007-07-13 15:11 |只看该作者
原帖由 ly321 于 2007-7-12 22:51 发表
我的问题是
ptr初始值为-1;
那么buf[ptr++]的时候,应该是先运算再++
那岂不是buf的索引是从-1开始??
解答下


i = 8, i * 4 =32, value >> 32 = 0, 这个值放到buf[-1]的位置

不过我也不太懂这样的使用内存方式,我肯定不会这样写:wink:

论坛徽章:
0
10 [报告]
发表于 2007-07-13 16:33 |只看该作者
原帖由 ly321 于 2007-7-12 22:51 发表
我的问题是
ptr初始值为-1;
那么buf[ptr++]的时候,应该是先运算再++
那岂不是buf的索引是从-1开始??
解答下



这个程序有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP