Согласно Википедии, Base32 использует 32-символьный набор, состоящий из двадцати шести заглавных букв A – Z и цифр 2–7. Вариант base32hex начинается с 0 - 9 и использует буквы от A до V.
Если были закодированы только числа с ограниченным диапазоном, вы можете легко их декодировать с помощью VBA, в противном случае вы могли бы должен вернуть массив байтов и обработать его дальше.
Вы пишете, что у вас есть до 10 десятичных цифр. Вопрос в том, какое максимальное количество. Тип Long
может хранить номера до 2,147,483,647
. Это десять цифр; однако с 10 цифрами вы можете сохранить число размером 9,999,999,999
.
. Следовательно, функция follow возвращает число как Double
. Если вы знаете, что ваше число никогда не превысит 2,147,483,647
, вы можете заменить Double
тип *1016* на переменную sum
и тип возвращаемого значения функции.
Public Function DecodeBase32hex(ByVal encoded As String) As Double
Dim ch As String
Dim sum As Double
Dim d As Long, i As Long
For i = 1 To Len(encoded)
ch = Mid$(encoded, i, 1)
If ch >= "A" And ch <= "Z" Then
d = Asc(ch) - Asc("A") + 10
ElseIf ch >= "0" And ch <= "9" Then
d = Asc(ch) - Asc("0")
Else
Exit For 'E.g. padding charachters
End If
sum = 32 * sum + d
Next i
DecodeBase32hex = sum
End Function
Test in Access 'Непосредственное окно:
?DecodeBase32hex("16O9E55")
1300543653