1,066
社区成员
发帖
与我相关
我的任务
分享
'从十进制转成任意进制,Num 要转换的数字,NumS数制值,16进制,你可以填16,返回值是个数组
Private Function FromDec(ByVal Num As Long, ByVal NumS As Integer) As Integer()
Dim C As Integer, Result() As Integer
Do Until Num = 0
ReDim Preserve Result(C)
Result(C) = Num Mod NumS
C = C + 1
Num = Num \ NumS
Loop
FromDec = Result
End Function
'从任意进制转成十进制 Num()任意进制数,是个数组,你可以从前一个函数里得到,NumS还是进制数,返回值是个十进制数
Private Function ToDec(ByRef Num() As Integer, ByVal NumS As Integer) As Long
Dim I As Integer, Result As Long
For I = 0 To UBound(Num)
Result = Result * NumS + Num(I)
Next
ToDec = Result
End Function
'生成一个进制串,Num就是转成任意进制后的数,是个数组,NumStr这个进制数的符号序列,比如十六进制的序列就是0123456789ABCDEF,不填的话出来(1)(2)这种样子的数
Private Function ShowValue(ByRef Num() As Integer, Optional ByVal NumStr As String = "") As String
Dim I As Integer, Result As String
For I = 0 To UBound(Num)
If Len(NumStr) > 0 Then
Result = Mid(NumStr, Num(I) + 1, 1) & Result
Else
Result = "(" & Num(I) & ")" & Result
End If
Next
ShowValue = Result
End Function
Private Sub Form_Load()
Dim Arr() As Integer
Arr = FromDec(634, 16) '把634转成16进制结果保存在Arr数组中
Debug.Print ShowValue(Arr, "0123456789ABCDEF") '显示Arr数组中的16进制数
Arr = FromDec(634, 2) '把64转成2进制结果保存在Arr数组中
Debug.Print ShowValue(Arr, "01") '显示Arr数组中的2进制数
End Sub
Dim n As Variant
Dim strOut As String
n = CDec("289356276212170752")
Do While n > 0
If Int(n / 2) = n / 2 Then
strOut = "0" & strOut
Else
strOut = "1" & strOut
End If
n = Int(n / 2)
Loop
MsgBox strOut