16進製字符-->10進製數字
方法1:
view plaincopy to clipboardprint?
#include <stdio.h>
int main()
{
char szValue[] = "0x11";
int nValude = 0;
sscanf(szValue,"%x",&nValude);
printf("%d/n",nValude);
return 0;
}
/*輸出: 17 */
#include <stdio.h>
int main()
{
char szValue[] = "0x11";
int nValude = 0;
sscanf(szValue,"%x",&nValude);
printf("%d/n",nValude);
return 0;
}
/*輸出: 17 */
主要用到sscanf這個庫函數:
函數名: sscanf
功 能: 執行從字符串中的格式化輸入
用 法: int sscanf(char *string, char *format[,argument,...]); //%x就是我們要格式化的類型,即輸出十六進製
函數名: sscanf
功 能: 執行從字符串中的格式化輸入
用 法: int sscanf(char *string, char *format[,argument,...]); //%x就是我們要格式化的類型,即輸出十六進製
方法2:
#include <stdio.h>
#include <stdlib.h>//strtol頭文件
int main()
{
char *p="0x11";
char *str;
int i = (int)strtol(p, &str, 16);//十六進製
printf("%d/n",i);
return 0;
}
/*輸出: 17 */
#include <stdio.h>
#include <stdlib.h>//strtol頭文件
int main()
{
char *p="0x11";
char *str;
int i = (int)strtol(p, &str, 16);//十六進製
printf("%d/n",i);
return 0;
}
/*輸出: 17 */
主要用到strtol這個庫函數,它的使用方法是:
函數名: strtol
功 能: 將串轉換為長整數
用 法: long strtol(char *str, char **endptr, int base);//base指明我們要轉換為幾進製數
程序例:
功 能: 將串轉換為長整數
用 法: long strtol(char *str, char **endptr, int base);//base指明我們要轉換為幾進製數
程序例:
view plaincopy to clipboardprint?
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string = "0x11", *endptr;
long lnumber;
/* strtol converts string to long integer */
lnumber = strtol(string, &endptr, 16);
printf("string = %s long = %ld/n", string, lnumber);
return 0;
}
/*輸出: string = 0x11 long = 17 */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string = "0x11", *endptr;
long lnumber;
/* strtol converts string to long integer */
lnumber = strtol(string, &endptr, 16);
printf("string = %s long = %ld/n", string, lnumber);
return 0;
}
/*輸出: string = 0x11 long = 17 */
在VC 6.0的MFC程序中,我們有時要轉換句柄就可以用strtol這個函數,比如:
view plaincopy to clipboardprint?
HANDLE handle = (HANDLE)strtol(str,NULL, 16);
HANDLE handle = (HANDLE)strtol(str,NULL, 16);
HANDLE handle = (HANDLE)strtol(str,NULL, 16);
HANDLE handle = (HANDLE)strtol(str,NULL, 16);
PS:句柄是什麼?
句柄就是用來區分各種內存對象的唯一標識符號,是個32位整數。
有些是整個係統唯一(如窗口句柄),有些是當前進程或線程中唯一(如線程句柄,全局的有另一個標識符)。
有些是整個係統唯一(如窗口句柄),有些是當前進程或線程中唯一(如線程句柄,全局的有另一個標識符)。
詳細的可分為許多種,都是以H開頭的。在VB中使用時全部都用Long。
常見的有窗口句柄(HWND),設備描述表句柄(HDC),內存句柄(HMEM),文件句柄,進程句柄,線程句柄,筆的類型句柄(HPEN),字體句柄(HFONT),區域句柄(HRGN)等等。
常見的有窗口句柄(HWND),設備描述表句柄(HDC),內存句柄(HMEM),文件句柄,進程句柄,線程句柄,筆的類型句柄(HPEN),字體句柄(HFONT),區域句柄(HRGN)等等。
在申請句柄時是要占用資源的,分三類SYSTEM、USER、GDI。而WINDOWS的資源是固定的,並不隨內存的擴大而擴大,所以使用完以後一定要釋放。
方法3:
在網上,還看到一位朋友提出一種方法,就是讀寫INI文件(我認為這種方法效率太低,畢竟要讀寫文件的),也將其摘錄如下:
view plaincopy to clipboardprint?
//存儲HANDLE
struct Tag_STRUCT
{
HWND hWnd;
} ;
struct Tag_STRUCT Struct;
Struct.hWnd = m_hWnd;
//把包含句柄的結構體寫入ini文件
WritePrivateProfileStruct("Section","Key",&Struct,sizeof(Struct),"C://1.ini");
//讀取HANDLE
struct Tag_STRUCT
{
HWND hWnd;
} ;
struct Tag_STRUCT Struct;
//從包含句柄的結構體的ini文件讀取HANDLE
GetPrivateProfileStruct("Section","Key",&Struct,sizeof(Struct),"C://1.ini");
//存儲HANDLE
struct Tag_STRUCT
{
HWND hWnd;
} ;
struct Tag_STRUCT Struct;
Struct.hWnd = m_hWnd;
//把包含句柄的結構體寫入ini文件
WritePrivateProfileStruct("Section","Key",&Struct,sizeof(Struct),"C://1.ini");
//讀取HANDLE
struct Tag_STRUCT
{
HWND hWnd;
} ;
struct Tag_STRUCT Struct;
//從包含句柄的結構體的ini文件讀取HANDLE
GetPrivateProfileStruct("Section","Key",&Struct,sizeof(Struct),"C://1.ini");
以上是我目前所知道的可以將十六進製的字符串轉化為整形數值的方法,可能還有更合適的方法,也請看到此篇文章的朋友幫忙留言添加,謝過!(看過外國的WiKipedia覺得很好,真希望我們國家也能有一個這樣的東東,方便以後的朋友查閱)
最後更新:2017-04-02 06:51:29