用函数Oct()将十进制位数 转换为八进制,用Hex()将十进制位 数转换为十六进制,不过值得注意的 是转换后数字型变为字符型。如果是 一个变量我们可以用如下代码完成十 进制向其他进制转换的目的。
dim Anum as long
Anum=& 010 '&0是八进制的 表示符号Anum自行转换为8。
Anum=&HA '&H是十六进制的 表示符号Anum自行转换为10。
如果我们有一个字符变量Astring 为八进制的或十六进制的,用Anum=” &0” + Astring和Anum=“&H”+Astring 能将它转换为十进制。VB中没有二进制的转换函 数,用如下代码可以实现十进制到二进 制的转换。
Option Explicit
Ptivate FunctiOn TenturnTwo (ByVal varNum As Long)
Dim returnString As String,ModNum As Integer
DO While varNum>0
ModNum=varNum Mod 2
varNum=varNum\2
returnString=Trim(Str (ModNum))+returnString
Loop
TenturnTwo=returnString
End Function
Private Function TwoturnTen (ByVal varString As String)
Dim Slen As Long,I As Long,
returnNum As Long
Slen=Len(varString)
For I=o To Slen-1
returmNum=returnNum +Val(Mid (varString,I+1,1))*(2^(Slen-I-1))
Next
TWoturnTen=returnNum
End Function
dim Anum as long
Anum=& 010 '&0是八进制的 表示符号Anum自行转换为8。
Anum=&HA '&H是十六进制的 表示符号Anum自行转换为10。
如果我们有一个字符变量Astring 为八进制的或十六进制的,用Anum=” &0” + Astring和Anum=“&H”+Astring 能将它转换为十进制。VB中没有二进制的转换函 数,用如下代码可以实现十进制到二进 制的转换。
Option Explicit
Ptivate FunctiOn TenturnTwo (ByVal varNum As Long)
Dim returnString As String,ModNum As Integer
DO While varNum>0
ModNum=varNum Mod 2
varNum=varNum\2
returnString=Trim(Str (ModNum))+returnString
Loop
TenturnTwo=returnString
End Function
Private Function TwoturnTen (ByVal varString As String)
Dim Slen As Long,I As Long,
returnNum As Long
Slen=Len(varString)
For I=o To Slen-1
returmNum=returnNum +Val(Mid (varString,I+1,1))*(2^(Slen-I-1))
Next
TWoturnTen=returnNum
End Function
public function o2b(byval long nValue) as string
dim nValueCopy as long
dim nTmp as byte '商
dim sReturn as string '返回值
nValueCopy = nValue '也有用nValue - 2^N 方式的,这里就不多说了 do while nValueCopy > 0
nTmp = nValueCopy / 2
sReturn = cstr( nValueCopy - nTmp / 2 ) & sReturn '反向累计
nValueCopy = nTmp
loop
o2b = sReturn
end function 而用c比较熟的人一般按位去做:
public function o2b(byref long nValue) as string
dim nBit( 0 to 7 ) as byte ' 最小的单位是byte了,放掩码
dim nByte( 1 to 4 ) as byte ' 分解nValue到字节的
dim nTmp as byte
dim pValue as long ' 指针
dim sReturn as string ' 返回值
dim i as byte, j as byte nBit(0) = 1 '00000001
nBit(1) = 2 '00000010
nBit(2) = 4 '00000100
nBit(3) = 8 '00001000
nBit(4) = 16 '00010000
nBit(5) = 32 '00100000
nBit(6) = 64 '01000000
nBit(7) = 128 '10000000 ' 取 nValue 的地址
pValue = VarPtr( nValue ) ' win32 api, 将nValue的4个字节分别复制到nByte中,byref 就相当于指针
CopyMemory( nByte(1), byref pValue, 4 ) for i = 4 to 1 '低字节在前
for j = 7 to 0 '高位开始
' 方法一, 减法
nTmp = 0
if nByte(i) > nBit(j) then
nByte = nByte(i) - nBit(j)
nTmp = 1 ' 这一位二进制是1
end if
sReturn = sReturn & cstr(nTmp) ' 方法二,按位与 效率更高
nTmp = 1
if ( not ( nByte(i) imp nBit(j) ) ) = nBit(j) then
' 我没有找到vb按位与的函数,只有按位"同与"(不记得是不是)的imp
nTmp = 0
end if
sReturn = sReturn & cstr(nTmp)
next j, i o2b = sReturnend function
以上代码保存于: SourceCode Explorer(源代码数据库)
复制时间: 2002-12-06 11:33
软件版本: 1.0.771
软件作者: Shawls
个人主页: Http://Shawls.Yeah.Net
E-Mail: [email protected]
QQ: 9181729
dim Anum as long
Anum=& 010 '&0是八进制的 表示符号Anum自行转换为8。
Anum=&HA '&H是十六进制的 表示符号Anum自行转换为10。
如果我们有一个字符变量Astring 为八进制的或十六进制的,用Anum=” &0” + Astring和Anum=“&H”+Astring 能将它转换为十进制。
VB的界面必须象触摸屏一样!包括数字可以任意点击在text中,从而按“转换键”
时就可以达到转换的效果了!