用VB编写一个将n进制整数转换成十进制数的通用程序!

作者&投稿:傅汤 (若有异议请与网页底部的电邮联系)
编写一个将N进制数转换成十进制数的VB通用过程 要完全的~

'说明,比如16进制:abcde转10进制 ,to10("abcde",16)Function To10(ByVal str As String, ByVal N As Integer) As Long
Dim sc As String, s As String
sc = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
str = UCase(str)

Dim i As Integer, x As Integer, ln As Integer, value As Long
ln = Len(str)

For i = ln To 1 Step -1
s = Mid(str, i, 1)
x = InStr(sc, s) - 1
value = value + x * N ^ (ln - i)
Next
To10 = valueEnd Function

Dim 十六进制字符集() As StringDim 八进制字符集() As StringDim 二进制字符集() As StringFunction N进制to十进制(n进制字符 As String, 字符集() As String) As Variant Dim 进制数 As Long Dim X As Long Dim TempStr As String Dim ReturnLong As Long Dim NowData As Long Dim RetDate As Long 进制数 = UBound(字符集) - LBound(字符集) + 1 '如果不区分大小写就统一字符 n进制字符 = UCase(n进制字符) For X = 1 To Len(n进制字符) TempStr = Mid(n进制字符, X, 1) NowData = -1 RetDate = -1 For Y = LBound(字符集) To UBound(字符集) NowData = NowData + 1 If TempStr = 字符集(Y) Then RetDate = NowData Exit For End If Next Y If RetDate -1 Then ReturnLong = ReturnLong + 进制数 ^ (Len(n进制字符) - X) * RetDate Else '非法的进制符号 N进制to十进制 = Null Exit Function End If Next X N进制to十进制 = ReturnLongEnd FunctionPrivate Sub Form_Load() ReDim 十六进制字符集(0 To 15) ReDim 八进制字符集(0 To 7) ReDim 二进制字符集(0 To 1) Dim X As Long '初始化二进制字符集 For X = 0 To 1 二进制字符集(X) = CStr(X) Next X '初始化八进制字符集 For X = 0 To 7 八进制字符集(X) = CStr(X) Next X '初始化十六进制字符集 For X = 0 To 9 十六进制字符集(X) = CStr(X) Next X For X = 10 To 15 十六进制字符集(X) = Chr(65 + (X - 10)) Next X '函数使用范例 Msgbox N进制to十进制("FFFF", 十六进制字符集) Msgbox N进制to十进制("7777", 八进制字符集) Msgbox N进制to十进制("110011", 二进制字符集)End Sub

重点是要学会如何利用按权展开式求和,算法了解了,代码就不难了。


Dim a As String, aa As Integer, b As String, bb As Integer, c As Integer
aa = InputBox("输入的是几进制数?")
aa = Trim(aa)
a = InputBox("数是多少?")
a = Trim(a)
For i = 1 To Len(a)
    b = Mid(a, i, 1)
    If (b > 9) Then
        bb = 10 + b - Asc("A")
    Else
        bb = Val(b)
    End If
                                                                    
    c = c + bb * aa ^ (Len(a) - i)
Next i
MsgBox "结果是:" & c



临时写的,简单测试通过。

注释也应该写全了,复制直接可用。

有什么不清楚的,追问好了。

Option Explicit
' 最大支持36进制,因为超过这个进制不知道以什么字符来表示了
' 字符表示:
'   11进制: A=10
'   12进制: B=11
'   13进制: C=12
'   14进制: D=13
'   15进制: E=14
'   16进制: F=15
'   17进制: H=16
'   18进制: I=17
'   依次类推
' 参数:
'   Text    需要转换的字符串
'           字符串首字符为(-)时,作为负数进行计算。
'           字符串前2字符为(0x, &H, &O)时,自动转换进制为其相应的进制。
'   Radix   需要转换为的进制基数(可选输入参数:默认值为10进制)
' 返回:
'   有符号8字节整数
'   为调用时可以获得到转换失败,所以内部没有做融错处理
'   调用时可以使用On Error捕获错误后,给出默认数值
Public Function ToDec(ByVal Text As String, Optional Radix As Integer = 10) As Currency
    Const Chars As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                                                                                      
    ' 变量声明
    Dim i As Long
    Dim Index As Integer
    Dim Length As Long
    Dim Sign As Long
    Dim Result As Currency
    
    ' 初始化
    Text = UCase(Text)
    Length = Len(Text)
    Sign = 1
    Result = 0
                                                                                      
    ' 符号位检查
    If Length >= 1 Then
        If Mid(Text, 1, 1) = "-" Then
            Sign = -1
            Text = Mid(Text, 2)
            Length = Length - 1
        End If
    End If
                                                                                      
    ' 进制表达式检查
    If Length >= 2 Then
        Select Case Mid(Text, 1, 2)
        Case "0x" ' 16进制(C)
            Radix = 16
            Text = Mid(Text, 3)
            Length = Length - 2
                                                                                          
        Case "&H", "&h" ' 16进制(Basic)
            Radix = 16
            Text = Mid(Text, 3)
            Length = Length - 2
                                                                                          
        Case "&O", "&o" ' 8进制(Basie)
            Radix = 8
            Text = Mid(Text, 3)
            Length = Length - 2
                                                                                          
        End Select
    End If
                                                                                      
    ' 转换每个字符
    For i = 1 To Length                                                                                   
        Index = InStr(Chars, Mid(Text, i, 1)) - 1
        If Index = -1 Then
            Exit For
        ElseIf Index > Radix Then
            Exit For
        End If
                                                                                          
        Result = Result * Radix + Index                                                                                     
    Next
                                                                                      
    ' 符号位处理
    Result = Result * Sign
                                                                                      
    ' 返回
    ToDec = Result
End Function

Private Sub Form_Load()
   
    ' 测试
    MsgBox ToDec("-&HFF")     ' Return -255
    MsgBox ToDec("-FF", 16)   ' Return -255
    MsgBox ToDec("-&HFF", 15) ' Return -255
    MsgBox ToDec("-FF", 15)   ' Return -240
    MsgBox ToDec("-FF", 11)   ' Return 0
    MsgBox ToDec("-FF")       ' Return 0
    
    End
End Sub


你这个n是指任意的数吗?如果是,那么就有个难点,假如n大于10,那么用什么符号来表示大于10小于n的数?我们知道16进制数用ABCDEF表示10到15这6个数,那么36进制呢?用10个阿拉伯数字+26个字母?那么再大呢?……所以我认为这个n不能是任意的数。
如果是常用的二进制、八进制、十六进制,那么就好办得多:

Function Nto10(s As String, n As Integer) As Long
If n = 8 Then
Nto10 = Val("&O" & s)
ElseIf n = 16 Then
Nto10 = Val("&H" & s)
ElseIf n = 2 Then
Dim i As Integer
For i = 1 To Len(s)
Nto10 = Nto10 + Val(Mid(s, i, 1)) * 2 ^ (Len(s) - i)
Next
Else
Nto10 = 0
End If
End Function

调用方法:
16进制: MsgBox Nto10("6B3F", 16)
8进制: MsgBox Nto10("1356", 8)
2进制: MsgBox Nto10("10011010", 2)


用VB编写一个将n进制整数转换成十进制数的通用程序!
Dim a As String, aa As Integer, b As String, bb As Integer, c As Integeraa = InputBox("输入的是几进制数?")aa = Trim(aa)a = InputBox("数是多少?")a = Trim(a)For i = 1 To Len(a) b = Mid(a, i, 1) If (b > 9) Then bb = 10 + b - Asc("...

VB编程:编写一个将N进制数转换成十进制数的通用程序。
text1.text 输入要转换的数 text2.text 要转换 的数的进制 text3.text 结果 Private Sub Command1_Click()Dim n, j As Integer Text3.Text = 0 n = Len(Trim(Text1.Text))For j = 1 To n Dim s1 As String s1 = Mid(Text1.Text, j, 1)If Val(Text2.Text) = 16 T...

求用VB编写的N进制与十进制的转换的代码
If Cyc = Len(Str(Number)) Then value_Bin = Temp_value + Val(Mid(Str(Number), Cyc, 1))Exit For End If If Cyc > 0 Then Temp_value = (Temp_value + Val(Mid(Str(Number), Cyc, 1))) * 2 Next Cyc End Function '===写入以上函数后转值操作:'十进制到十六进制:Hex(十...

编写VB程序 编写Sub过程 把任意一个十进制数N分别转换成二进制八进制...
Private Sub Command1_Click() Dim IntegerPart As Long, DecimalPart As Double Dim Carry(), CharacterCode(15) As String Carry = Array(2, 8, 16) IntegerPart = Int(Val(Text1.Text)) DecimalPart = Val(Text1.Text) - Int(Val(Text1.Text)) For i = LBound(CharacterCod...

vb编写程序,利用Sub过程实现将任意一个十进制数n分别转换成2进制、8进 ...
Private Sub Command1_Click()a = CInt(Text1.Text)s = ""dec2n a, 2, s Print a; "=("; s; ")2"dec2n a, 8, s Print a; "=("; s; ")8"dec2n a, 16, s Print a; "=("; s; ")16"End Sub Sub dec2n(ByVal a, r, s)s = ""While a > 0 x = a Mod ...

vb编写将10进制数n转变成r(2~16)进制数的
Private Function f(n As Long, r As Long) As String Dim zh As String, s As Integer Do zh = n Mod r & zh n = n \\ r Loop While n <> 0 f = zh End Function Private Sub Command1_Click()Text3 = f(Val(Text1), Val(Text2.Text))End Sub Private Sub Form_Load()T...

用VB编写程序,把任意一个十进制N转换成分别用二进制,八进制和十六进制的...
VB进制转换大全' 用途:将十进制转化为二 进制' 输入:Dec(十进制数)' 输入数据类型:Long' 输出:DEC_to_BIN(二进 制数)' 输出数据类型:String' 输入的最大数为2147483647,输出最大数为1111111111111111111111111111111(31个1)Public Function DEC_to_BIN(Byval Dec As Long) As String DEC_to_BIN = "" Do...

vb键盘输入一个正整数存入n,然后随机产生n个两位正整数存入组A中,要 ...
3) = Val(Text3.Text)a(4) = Val(Text4.Text)t = 0 For x = 1 To 3 For y = x + 1 To 4 If a(x) > a(y) Then t = a(y)a(y) = a(x)a(x) = t End If Next y Next x Text1.Text = a(1)Text2.Text = a(2)Text3.Text = a(3)Text4.Text = a(4)

用VB编写 “ 从键盘输入N个数据,放入数组中,然后求其平均值”怎么写啊...
dim count as String dim sum as String dim a[10]for i=1 to 10 a[i]=intputbox "输入a[i] 的值"next i sum =0 for i=1 to 10 sum =sum +a[i]next i count=sum\/10 你放到一个事件中执行应该可以!!

求vb编写给定一个整数N,求该整数的原码,反码,补码的程序!要用十进制的...
Private Sub Command1_Click()Dim a(16) As Integer, x As Integer x = CInt(Text1.Text)If x >= 0 Then a(16) = 0 Else a(16) = 1 x = Abs(x)For i = 1 To 15 a(i) = x Mod 2 x = x \\ 2 Next i Text2.Text = ""For i = 16 To 1 Step -1 Text2.Text =...

富裕县17814835590: 编写一个将N进制数转换成十进制数的VB通用过程 要完全的
双松力雷: '说明,比如16进制:abcde转10进制 ,to10("abcde",16) Function To10(ByVal str As String, ByVal N As Integer) As Long Dim sc As String, s As String sc = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" str = UCase(str) Dim i As ...

富裕县17814835590: VB编程:编写一个将N进制数转换成十进制数的通用程序. -
双松力雷: 控件说明:text1.text 输入要转换的数 text2.text 要转换 的数的进制 text3.text 结果 Private Sub Command1_Click() Dim n, j As Integer Text3.Text = 0 n = Len(Trim(Text1.Text)) For j = 1 To n Dim s1 As String s1 = Mid(Text1.Text, j, 1) If Val(Text2.Text) ...

富裕县17814835590: 求用VB编写将N进制数转换成十进制数的通用程序 -
双松力雷: asp写的,支持10以下进制,16进制自己添加一下abcdef的选择就行'十进制转M进制 function DexTo(num,m) dim tmp tmp = "" do while(num>=1) tmp = tmp & cstr(num mod m) num = int(num / m) loop DexTo = StrReverse(tmp) end function'M进...

富裕县17814835590: N进制转化为十进制 VB算法
双松力雷: Private Sub Form_click() Dim n As Integer, a As Integer n = InputBox("请输入进制数", "") a = InputBox("要转换的数", "") Print fun(n, a) End Sub Function fun(n As Integer, a As Integer) As Integer Dim r As Integer, i As Integer ...

富裕县17814835590: 急!VB语言N进制数转换为十进制数通用程序 -
双松力雷: Dim 十六进制字符集() As String Dim 八进制字符集() As String Dim 二进制字符集() As String Function N进制to十进制(n进制字符 As String, 字符集() As String) As Variant Dim 进制数 As Long Dim X As Long Dim TempStr As ...

富裕县17814835590: N进制转化为十进制VB算法 -
双松力雷: N进制转换成十进制 (十六进制除外)Dim u As Double, x As Double, z As Double u = 0 x = Len(数据)For Y = 0 To x - 1 x = x - 1 z = Mid( 数据 , Y + 1, 1) u = u + Val(z) * ( 进制数 ) ^ x Next十六进制转成十进制 Dim u As Double, x As ...

富裕县17814835590: 求用VB编写的N进制与十进制的转换的代码 -
双松力雷: '此函数用于十进制到二进e799bee5baa6e4b893e5b19e31333236376464制 Private Function Bin(Number As Long) As Long Dim Div_value As String Do Div_value = (Number Mod 2) & Div_value Number = Int(Number / 2) Loop Until Number < 2 ...

富裕县17814835590: vb中N进制数转化成十进制数的通用方法,指点下
双松力雷: Private Function ToDEC(oContent As String, num As Integer) As Single 'num为进制 Dim a() As String, i As Integer, t As Integer, result As Single result = 0 a = Split(oContent, ".") For i = 1 To Len(a(0)) t = Int(Mid(a(0), i, 1)) result = result + t * num ...

富裕县17814835590: 用vb编写一个将二进制数整数转换为十进制数的程序 -
双松力雷: Private Sub Command1_Click() For i = Len(Text1.Text) To 1 Step -1 s = s + 2 ^ (i - 1) Next i Text1.Text = s End Sub

富裕县17814835590: 用VB如何编一个二进制转十进制的程序 -
双松力雷: a=inputbox("输入一个二进制数:") s=0 for i=1 to len(a) s=s + CInt(mid(a,i,1))*2^i next msgbox s

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网