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
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进制的代码 有的需要你修改一下
需要制定规则 如&H表示十六进制,&B表示二进制。
Hex() 可转十六进制
其他进制转换的函数,查搜索论坛上的帖子吧有很多的。
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
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进制的代码 有的需要你修改一下
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