文章出处: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指明我们要转换为几进制数
程序例: