免费注册 查看新帖 |

Chinaunix

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

字符串中的16进制数转int [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-04 10:40 |只看该作者 |倒序浏览
问题如上,
当string="0xa8"时,怎么样将0xa8的值存储在int(或其它非string型)变量中,除了一个一个将string中的字符作比较外,有无其它的高效/简便方法?谢谢大家回帖!

论坛徽章:
0
2 [报告]
发表于 2011-03-04 10:44 |只看该作者
没有~

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2011-03-04 10:51 |只看该作者
strtol

论坛徽章:
0
4 [报告]
发表于 2011-03-04 10:54 |只看该作者
同楼上或者sscanf

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
5 [报告]
发表于 2011-03-04 11:29 |只看该作者
同楼上或者sscanf
davelv 发表于 2011-03-04 10:54


给个例子? 谢谢


前几天porting一个东西, 写了一个函数分析类似  b.0.2 或者 2.0.0这样的输入:
  1. static int parse_bdf(const char *bdf, int *b, int *d, int *f)
  2. {/*{{{*/
  3.         int ret = 0;
  4.         char buf[1024], *dot1, *dot2, tmp[20], tmp2[22];

  5.         strncpy(buf, bdf, sizeof(buf));

  6.         /* Bus */
  7.         dot1 = strchr(buf, '.');
  8.         if (dot1 == NULL) {
  9.                 ret = -1;
  10.                 goto out;
  11.         }
  12.         *dot1 = '\0';
  13.         strncpy(tmp, buf, sizeof(tmp));
  14.         snprintf(tmp2, sizeof(tmp2), "0x%s", tmp);
  15.         *b = strtol(tmp2, NULL, 16);

  16.         /* Device */
  17.         dot2 = strrchr(dot1 + 1, '.');
  18.         if (dot2 == NULL) {
  19.                 ret = -1;
  20.                 goto out;
  21.         }
  22.         *dot2 = '\0';
  23.         strncpy(tmp, dot1 + 1, sizeof(tmp));
  24.         snprintf(tmp2, sizeof(tmp2), "0x%s", tmp);
  25.         *d = strtol(tmp2, NULL, 16);

  26.         /* Fucntion */
  27.         strncpy(tmp, dot2 + 1, sizeof(tmp));
  28.         snprintf(tmp2, sizeof(tmp2), "0x%s", tmp);
  29.         *f = strtol(tmp2, NULL, 16);
  30. out:
  31.         return ret;
  32. }/*}}}*/
复制代码
有人告诉我sscanf能实现,但是看了man没琢磨出来。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2011-03-04 11:38 |只看该作者
给个例子? 谢谢


前几天porting一个东西, 写了一个函数分析类似  b.0.2 或者 2.0.0这样的输入:有 ...
帅绝人寰 发表于 2011-03-04 11:29



    sscanf(bdf, "%x.%x.%x", &b, &d, &f);

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
7 [报告]
发表于 2011-03-04 12:34 |只看该作者
sscanf(bdf, "%x.%x.%x", &b, &d, &f);
hellioncu 发表于 2011-03-04 11:38


多谢大侠。 PS, 还好我没把上面那段代码release出去,哈哈

论坛徽章:
0
8 [报告]
发表于 2011-03-04 12:54 |只看该作者
阿,已经有人帮忙解决了

论坛徽章:
0
9 [报告]
发表于 2011-03-04 13:26 |只看该作者
谢谢!不是的,我接到上层传来的字符串已经确定了,所以不能用sscanf。

论坛徽章:
0
10 [报告]
发表于 2011-03-04 13:38 |只看该作者
strtol可以,谢谢楼上各位兄弟的帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP