输入一个数(十进制,二进制或者是十六进制)回车后输出其他两种进制的相应数字。

解决方案 »

  1.   

    根据输入数的类型,
    需要制定规则 如&H表示十六进制,&B表示二进制。
    Hex() 可转十六进制
    其他进制转换的函数,查搜索论坛上的帖子吧有很多的。
      

  2.   

    数制转换的贴子CSDN上到处都是。
      

  3.   

    10 to 16:
    hex(123)
    =7B16 to 10:
    val(&H7B)
    =12310 to 2:
    Function ToBin(Num As Long) As String
    Do
    ToBin = Num Mod 2 & ToBin
    Num = Num \ 2
    Loop While Num
    End FunctionToBin(123)
    =1111011
    2 to 10:
    Function ToDec(BinStr As String) As Long
    Dim i As Long
    For i = 1 To Len(BinStr)
    ToDec = ToDec * 2 + CLng(Mid(BinStr, i, 1))
    Next i
    End FunctionToDec(1111011)
    =123
    '16 to 2
    Function HexToBin(HexStr As String) As String
    Dim i As Long
    Const tmp As String = "0000000100100011010001010110011110001001101010111100110111101111"
    For i = 1 To Len(HexStr)
    HexToBin = HexToBin & Mid$(tmp, Val("&H" & Mid$(HexStr, i, 1)) * 4 + 1, 4)
    Next i
    Dim P1 As Long: P1 = InStr(HexToBin, "1")
    If P1 Then HexToBin = Right$(HexToBin, Len(HexToBin) - P1 + 1) Else HexToBin = "0"
    End Function
    '2 to 16
    Function ToHex(BinStr As String) As String
    Dim i As Long
    BinStr = String$((4 - Len(BinStr) Mod 4) Mod 4, "0") & BinStr
    For i = 0 To Len(BinStr) \ 4 - 1
        Select Case Mid$(BinStr, i * 4 + 1, 4)
            Case "0000": ToHex = ToHex & "0"
            Case "0001": ToHex = ToHex & "1"
            Case "0010": ToHex = ToHex & "2"
            Case "0011": ToHex = ToHex & "3"
            Case "0100": ToHex = ToHex & "4"
            Case "0101": ToHex = ToHex & "5"
            Case "0110": ToHex = ToHex & "6"
            Case "0111": ToHex = ToHex & "7"
            Case "1000": ToHex = ToHex & "8"
            Case "1001": ToHex = ToHex & "9"
            Case "1010": ToHex = ToHex & "A"
            Case "1011": ToHex = ToHex & "B"
            Case "1100": ToHex = ToHex & "C"
            Case "1101": ToHex = ToHex & "D"
            Case "1110": ToHex = ToHex & "E"
            Case "1111": ToHex = ToHex & "F"
        End Select
    Next i
    End FunctionPrivate Sub Command1_Click()
    MsgBox HexToBin("7B")
    MsgBox ToHex("1111011")
    End Sub
      

  4.   

    Function tentoeight(num As Currency) As Long  
       If num < 1 Then Exit Function
       numb(UBound(numb) - 1) = num Mod 8
       num = Int(num / 8)
       If num > 0 Then
          ReDim Preserve numb(UBound(numb) + 1)
          tentoeight (num)
       Else
          Exit Function
       End If
    End FunctionFunction tentosixteen(num As Currency) As Long 
       If num < 1 Then Exit Function
       numb(UBound(numb) - 1) = num Mod 16
       Select Case numb(UBound(numb) - 1)
              Case 10
                   numb(UBound(numb) - 1) = "A"
              Case 11
                   numb(UBound(numb) - 1) = "B"
              Case 12
                   numb(UBound(numb) - 1) = "C"
              Case 13
                   numb(UBound(numb) - 1) = "D"
              Case 14
                   numb(UBound(numb) - 1) = "E"
              Case 15
                   numb(UBound(numb) - 1) = "F"
       End Select
       num = Int(num / 16)
       If num > 0 Then
          ReDim Preserve numb(UBound(numb) + 1)
          tentosixteen (num)
       Else
          Exit Function
       End If
    End Function
    这两个是10进制转8进制和16进制的代码 有的需要你修改一下
      

  5.   

    十进制到二进制原理(以十进制10为例):
    10 整除  2  等于  5     余数  0 
    5  整除  2  等于  2     余数  1 
    2  整除  2  等于  1     余数  0
    1  整除  2  等于  0     余数  1
    商为零时停止运算      倒过来 ↑
    十进制 10 的二进制写法即为 1010逆向运算,就是二进制到十进制啦:
    ?0*2+1
     1 
    ?1*2+0
     2 
    ?2*2+1
     5 
    ?5*2+0
     10 就像楼上说的,N进制,就是整除N和与N取余,逆向运算就是乘N再加余数16进制也是一样的,任何数与16取余都不可能大于15,因为15用一位数字表达不出来,所以不同点只在于16进制用字母A到F来表示10到15
    例如123(十进制):
    123 mod 16 = 11
    123\16 = 7
    11用B来表示了,所以十进制数字123的16进制写法即为7B逆向运算:
    ?7*16
     112 
    ?112+11(也就是B)
     123 再如12345(十进制):
    ?12345 mod 16
     9           <=
    ?12345\16
     771 
    ?771 mod 16
     3           <=
    ?771\16
     48 
    ?48 mod 16
     0          <= 
    ?48\16
     3 
    ?3 mod 16
     3          <=
    ?3\16
     0 
    商为零,停止运算,12345的16进制即为3039逆向运算:
    ?0*16+(3)
     3 
    ?3*16+(0)
     48 
    ?48*16+(3)
     771 
    ?771*16+(9)
     12345