這個問題看是很簡單,但是在不同語言中實現的方式卻千差萬別,如果不知道方法,還真是麻煩,我就是在
C#
中遇到該問題,讓我費了很大的周折,才在
msdn
查到。
一、
16
進制字符串轉數字
1
、
C/C++
I
、最簡單的辦法:
sscanf(“12AB”,,”%x”,&lngHex); //
字符也可以為
”0x12AB”
II
、有個朋友,自行編寫函數實現了該功能,據說速度比
sscanf
快:
BOOL HexToDec( LPCTSTR shex,int& idec )
{
int i,mid;
int len = lstrlen( shex );
if( len>8 ) return FALSE;
mid = 0; idec = 0;
for( i=0;i<len;i++ )
{
if( shex[i]>='0'&&shex[i]<='9' ) mid = shex[i]-'0';
else if( shex[i]>='a'&&shex[i]<='f' ) mid = shex[i] -'a' +10;
else if( shex[i]>='A'&&shex[i]<='F' ) mid = shex[i] -'A' +10;
else return FALSE;
mid <<= ((len-i-1)<<2);
idec |= mid;
}
return TRUE;
}
{
int i,mid;
int len = lstrlen( shex );
if( len>8 ) return FALSE;
mid = 0; idec = 0;
for( i=0;i<len;i++ )
{
if( shex[i]>='0'&&shex[i]<='9' ) mid = shex[i]-'0';
else if( shex[i]>='a'&&shex[i]<='f' ) mid = shex[i] -'a' +10;
else if( shex[i]>='A'&&shex[i]<='F' ) mid = shex[i] -'A' +10;
else return FALSE;
mid <<= ((len-i-1)<<2);
idec |= mid;
}
return TRUE;
}
2
、
VB
LngHex=val(“&H12AB”)
3
、
VB.net
LngHex=val(“&H12AB”)
4
、
C#
lngHex=Convert.ToInt32(“0x12AB”,16); //
也可以直接寫
12AB
在
Msdn
上有一個條目:“如何:將十六進制字符串轉換為數字”
使用
ToInt32
,第一個參數為要轉換的字符串,第二個參數表示數字的基數,十六進制為
16
。
此外不僅支持
16
進制,
2
,
8
,
10
進制都支持
二、數字轉
16
進制字符串
1
、
C/C++
Printf(“%x”,1234);
2
、
VB
Hex(1234)
3
、
VB.net
Hex(1234)
Int(1234).ToString(“X4”)
4
、
C#
((int)1234).ToString(“X4”);
