Code: Select all
#alphanum$="0123456789abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZабвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ!@#$%^&*()_+-=[]{}\|:;'"+Chr(34)+",.<>/?`~ "
Global lenc.q=Len(#alphanum$)
Procedure.s NumToBase(x.q)
; Convert number to base string.
Protected.s r$
If x > 0
While x <> 0
r$ = Mid(#alphanum$, (x % lenc) + 1, 1) + r$
x / lenc
Wend
Else
r$ = "0"
EndIf
ProcedureReturn r$
EndProcedure
Procedure.q BaseToNum(base$)
; Convert base string to number.
Protected i.i, x.q, blen.q
x = FindString(#alphanum$, Right(base$, 1)) - 1 ; get last character
blen = Len(base$)
For i = blen - 1 To 1 Step -1
x = x + Pow(lenc, (blen - i)) * (FindString(#alphanum$, Mid(base$, i, 1)) - 1)
Next i
ProcedureReturn x
EndProcedure
Debug NumToBase(9223372036854775807) ; nЩCEхСmZ\
Debug BaseToNum("nЩCEхСmZ\") ; 9223371659080778752
9223372036854775807 --> nЩCEхСmZ\
but vice versa, I can not
nЩCEхСmZ\ --> 9223371659080778752
9223372036854775807 != 9223371659080778752
why is this happening?