在程式中,有時需要將乙個十六進製制字串轉換為十進位制數字。比如:
char *ptr = "0x11";
int n = 0;
//我們想讓n等於0x11, 即17
通常我們在c中,想將乙個字串轉換為一整型數字,通常會使用下面的方法:
[cpp]view plain
copy
char *ptr="123";
int n=0;
n=atoi(ptr);
printf("%d/n",n);
//輸出:123
但是atoi庫函式只能將十進位制字串轉化為int整型,比如下面的例子:
[cpp]view plain
copy
#include
#include //atoi標頭檔案
int main(void)
/*輸出:
string = 12345.67 integer = 12345*/
所以,要用atoi函式將"0x11"轉化為十進位制整型17是不行的。如果用的話,會輸出下面的結果:
[c-sharp]view plain
copy
int n;
char *str = "0x11";
n = atoi(str); //返回值n等於0 (顯然不是我們想要的結果)
那怎麼辦呢?這時有人會想那好辦,我們自己寫個函式轉化下就行了,比如用下面的方法:
注意:我們用vc6.0建立了乙個win32控制台程式,為了方便,程式中使用了cstring型別變數,需要做一點修改。
(1) 包含afx.h標頭檔案
(2) 在project->settings->general->mircrosoft foundation classes中,選擇use mfc in a shared dll 然後我們就可以在win32控制台下使用cstring變數,否則會出現編譯錯誤。
[c-sharp]view plain
copy
#include
#include
int changenum(cstring str,int length)
; //根據十六進製制字串的長度,這裡注意陣列不要越界
int num[16]=;
int count=1;
int result=0;
strcpy(revstr,str);
for (int i=length-1;i>=0;i--)
return result;
} int main()
/*輸出:
17*/
是的,上面的方法可以得到我們想要的值。還有更簡單的方法嗎?當然有!
方法1:
[c-sharp]view plain
copy
#include
int main()
/*輸出:
17*/
主要用到sscanf這個庫函式:
函式名:sscanf
功能:執行從字串中的格式化輸入
用法:int sscanf ( char *string, char *format[, argument, ...] ); //%x就是我們想要格式化的型別,即輸出十六進製制
方法2:
[c-sharp]view plain
copy
#include
#include //strtol標頭檔案
int main()
/*輸出:
17*/
這裡主要用到strtol這個庫函式,它的使用方法是:
函式名:strtol
功能:將串轉換為長整數
用法:long strtol( char *str, char **endptr, int base ); //base指明我們要轉換為幾進製數
程式例:
[c-sharp]view plain
copy
#include
#include
int main(void)
/*輸出:
string = 0x11 long = 17*/
將乙個十六進製制字串轉換為十進位制數值的問題
在程式中,我們有時需要將乙個十六進製制字串轉換為十進位制數字。比如 char ptr 0x11 int n 0 我們想讓n等於0x11,即17 通常我們在c中,想將乙個字串轉換為一整形數字,通常會使用下面的方法 但是atoi庫函式只能將十進位制字串轉化為int整形,比如下面的例子 所以要用atoi函...
將乙個十六進製制字串轉換為十進位制數值的問題
在程式中,我們有時需要將乙個十六進製制字串轉換為十進位制數字。比如 char ptr 0x11 int n 0 我們想讓n等於0x11,即17 通常我們在c中,想將乙個字串轉換為一整形數字,通常會使用下面的方法 cpp view plain copy print?char ptr 123 int n...
將乙個十六進製制字串轉換為十進位制數值的問題
在程式中,我們有時需要將乙個十六進製制字串轉換為十進位制數字。比如 char ptr 0x11 int n 0 我們想讓n等於0x11,即17 通常我們在c中,想將乙個字串轉換為一整形數字,通常會使用下面的方法 char ptr 123 intn 0 n atoi ptr printf d n n ...