在程式中,我們有時需要將乙個十六進製制字串轉換為十進位制數字。比如:
char *ptr="0x11";
int n=0;
//我們想讓n等於0x11,即17
通常我們在c中,想將乙個字串轉換為一整形數字,通常會使用下面的方法:
char
*ptr=
"123"
;
intn=0;
n=atoi(ptr);
printf("%d/n"
,n);
//輸出:123
但是atoi庫函式只能將十進位制字串轉化為int整形,比如下面的例子:
#include
#include //atoi標頭檔案
intmain(
void
)
/*輸出:
string = 12345.67 integer = 12345*/
所以要用atoi函式將"0x11"轉化為十進位制整形17是不行的。如果用的話,會輸出下面的結果:
intn;
char
*str =
"0x11"
;
n = atoi(str); //返回值n等於0 (顯然不是我們想要的結果)
那怎麼辦呢?這時有人會想,那好辦,我們自己寫個函式轉化下就行了,比如用下面的方法:
注意:我們用vc 6.0建了乙個win32控制台程式,為了方便,程式中使用了cstring型別變數,需要做一點修改。
(1)包含afx.h標頭檔案
(2)在project->settings->general->mircosoft foundation classes中,選擇use mfc in a shared dll
然後我們就可以在win32控制台下使用cstring變數了,否則會出現編譯錯誤。
#include
#include
intchangenum(cstring str,
intlength)
; //根據十六進製制字串的長度,這裡注意陣列不要越界
intnum[16]=;
intcount=1;
intresult=0;
strcpy(revstr,str);
for(
inti=length-1;i>=0;i--)
return
result;
} int
main()
/*輸出:
17*/
是的,上面方法可以得到我們想要的值。還有更簡單的方法嗎?當然有!
方法1:
#include
intmain()
/*輸出:
17*/
主要用到sscanf這個庫函式:
函式名: sscanf
功 能: 執行從字串中的格式化輸入
用 法: int sscanf(char *string, char *format[,argument,...]); //%x就是我們要格式化的型別,即輸出十六進製制
方法2:
#include
#include //strtol標頭檔案
intmain()
/*輸出:
17*/
主要用到strtol這個庫函式,它的使用方法是:
函式名: strtol
功 能: 將串轉換為長整數
用 法: long strtol(char *str, char **endptr, int base);//base指明我們要轉換為幾進製數
程式例:
#include
#include
intmain(
void
)
/*輸出:
string = 0x11 long = 17*/
在vc 6.0的mfc程式中,我們有時要轉換控制代碼就可以用strtol這個函式,比如:
handle
handle = (
handle
)strtol(str,null, 16);
ps:控制代碼是什麼?
控制代碼就是用來區分各種記憶體物件的唯一識別符號號,是個32位整數。
有些是整個系統唯一(如視窗控制代碼),有些是當前程序或執行緒中唯一(如執行緒控制代碼,全域性的有另乙個識別符號)。
詳細的可分為許多種,都是以h開頭的。在vb中使用時全部都用long。
常見的有視窗控制代碼(hwnd),裝置描述表控制代碼(hdc),記憶體控制代碼(hmem),檔案控制代碼,程序控制代碼,執行緒控制代碼,筆的型別控制代碼(hpen),字型控制代碼(hfont),區域控制代碼(hrgn)等等。
在申請控制代碼時是要占用資源的,分三類system、user、gdi。而windows的資源是固定的,並不隨記憶體的擴大而擴大,所以使用完以後一定要釋放。
方法3:
在網上,還看到一位朋友提出一種方法,就是讀寫ini檔案(我認為這種方法效率太低,畢竟要讀寫檔案的),也將其摘錄如下:
//儲存handle
struct
tag_struct
; struct
tag_struct struct;
struct.hwnd = m_hwnd;
//把包含控制代碼的結構體寫入ini檔案
writeprivateprofilestruct("section"
,"key"
,&struct,
sizeof
(struct),
"c:"
);
//讀取handle
struct
tag_struct
; struct
tag_struct struct;
//從包含控制代碼的結構體的ini檔案讀取handle
getprivateprofilestruct("section"
,"key"
,&struct,
sizeof
(struct),
"c:"
);
將乙個十六進製制字串轉換為十進位制數值的問題
在程式中,我們有時需要將乙個十六進製制字串轉換為十進位制數字。比如 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中,想將乙個字串轉換為一整型數字,通常會使用下面的方法 cpp view plain copy char ptr 123 int n 0 n ato...