将一个十六进制“字符串”转换为十进制数值的问题

文章出处:http://dev.firnow.com/course/3_program/c++/cppjs/20091010/178409.html

 

    在程序中,有时需要将一个十六进制字符串转换为十进制数字。比如:

    char *ptr = "0x11";

    int n = 0;

    //我们想让n等于0x11, 即17

    通常我们在C中,想将一个字符串转换为一整型数字,通常会使用下面的方法:

   

    但是atoi库函数只能将十进制字符串转化为int整型,比如下面的例子:

   

    所以,要用atoi函数将"0x11"转化为十进制整型17是不行的。如果用的话,会输出下面的结果:

   

    那怎么办呢?这时有人会想那好办,我们自己写个函数转化下就行了,比如用下面的方法:

    注意:我们用VC6.0建立了一个Win32控制台程序,为了方便,程序中使用了CString类型变量,需要做一点修改。

    (1) 包含afx.h头文件

    (2) 在Project->Settings->General->Mircrosoft Foundation Classes中,选择Use MFC in a Shared DLL 然后我们就可以在Win32控制台下使用CString变量,否则会出现编译错误。

   

    是的,上面的方法可以得到我们想要的值。还有更简单的方法吗?当然有!

    方法1:

   

    主要用到sscanf这个库函数:

    函数名:sscanf

    功能:执行从字符串中的格式化输入

    用法:int sscanf ( char *string, char *format[, argument, ...] ); //%x就是我们想要格式化的类型,即输出十六进制

 

    方法2:

   

    这里主要用到strtol这个库函数,它的使用方法是:

    函数名:strtol

    功能:将串转换为长整数

    用法:long strtol( char *str, char **endptr, int base ); //base指明我们要转换为几进制数

    程序例:

   

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值