任意長度的十進位制數轉為二進位制、十六進位制,和大數除法演算法(只有小半份)
阿新 • • 發佈:2019-01-04
輾轉求餘法實現的任意長度十進位制數到2進位制和16進位制轉換方法
Sub asdf() Debug.Print Dec2Bin("3214123412351234123415123412351234123451235123412341234") Debug.Print Dec2Hex("3214123412351234123415123412351234123451235123412341234") End Sub '任意長度的10進位制數的整除運算,除數為2 Function Div2(devidend As String) As String Dim Remain As Boolean '當前數位是否有餘數 For i = 1 To Len(devidend) Dim CuInt As Integer CuInt = IIf(Remain, 10, 0) + Mid(devidend, i, 1) '上一位有餘數時,加到當前數位上再做除法 Remain = Not (CuInt Mod 2 = 0) Div2 = Div2 & CuInt \ 2 Next i End Function '任意長度的10進位制數對2求餘(判斷最後一位數字是奇數還是偶數) Function Mod2(devidend As String) As Integer Mod2 = IIf(Right(devidend, 1) Mod 2 = 1, 1, 0) End Function '任意長度的10進位制數轉為2進位制,輾轉求餘 Function Dec2Bin(devidend As String) As String Dim res As String res = devidend Do Dec2Bin = Mod2(res) & Dec2Bin res = Div2(res) Loop Until (res = 0) End Function '任意長度的10進位制數轉為16進位制(先轉成2進位制,再轉成16進位制) Function Dec2Hex(devidend As String) As String Dim res As String res = Dec2Bin(devidend) If Len(res) Mod 4 > 0 Then res = String(4 - (Len(res) Mod 4), "0") & res '補齊起始4位 For i = 1 To Len(res) - 3 Step 4 Dec2Hex = Dec2Hex & Hex(Mid(res, i, 1) * 8 + Mid(res, i + 1, 1) * 4 + Mid(res, i + 2, 1) * 2 + Mid(res, i + 3, 1)) Next i End Function