1. 程式人生 > >將一個十六進位制字串轉換為十進位制數值的問題

將一個十六進位制字串轉換為十進位制數值的問題

在程式中,我們有時需要將一個十六進位制字串轉換為十進位制數字。比如:
char *ptr="0x11";
int n=0;
//我們想讓n等於0x11,即17

通常我們在C中,想將一個字串轉換為一整形數字,通常會使用下面的方法:

但是atoi庫函式只能將十進位制字串轉化為int整形,比如下面的例子:

所以要用atoi函式將"0x11"轉化為十進位制整形17是不行的。如果用的話,會輸出下面的結果:

那怎麼辦呢?這時有人會想,那好辦,我們自己寫個函式轉化下就行了,比如用下面的方法:
注意:我們用VC 6.0建了一個Win32控制檯程式,為了方便,程式中使用了CString型別變數,需要做一點修改。
(1)包含afx.h標頭檔案
(2)在Project->Settings->General->Mircosoft 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指明我們要轉換為幾進位制數
程式例:

在VC 6.0的MFC程式中,我們有時要轉換控制代碼就可以用strtol這個函式,比如:

PS:控制代碼是什麼?

控制代碼就是用來區分各種記憶體物件的唯一識別符號號,是個32位整數。
有些是整個系統唯一(如視窗控制代碼),有些是當前程序或執行緒中唯一(如執行緒控制代碼,全域性的有另一個識別符號)。

詳細的可分為許多種,都是以H開頭的。在VB中使用時全部都用Long。
常見的有視窗控制代碼(HWND),裝置描述表控制代碼(HDC),記憶體控制代碼(HMEM),檔案控制代碼,程序控制代碼,執行緒控制代碼,筆的型別控制代碼(HPEN),字型控制代碼(HFONT),區域控制代碼(HRGN)等等。

在申請控制代碼時是要佔用資源的,分三類SYSTEM、USER、GDI。而WINDOWS的資源是固定的,並不隨記憶體的擴大而擴大,所以使用完以後一定要釋放。

方法3:

在網上,還看到一位朋友提出一種方法,就是讀寫INI檔案(我認為這種方法效率太低,畢竟要讀寫檔案的),也將其摘錄如下:

以上是我目前所知道的可以將十六進位制的字串轉化為整形數值的方法,可能還有更合適的方法,也請看到此篇文章的朋友幫忙留言新增,謝過!