Caja Posted May 15, 2012 Share Posted May 15, 2012 Hi everyone, I figured out how to do the reverse from base-36 to base-10 but having difficulty wrapping my head around how to convert from base-10 to base-36. Any help would be much appreciated. #include <Array.au3> Dim $array[36] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] Dim $sum = "" Dim $str = "GNTHQ" $strLen = StringLen($str) For $i = 0 To ($strLen-1) $index = _ArraySearch($array, StringMid($str, $i+1, 1)) $sum = $sum + ($index * (36^(($strLen-1)-$i))) Next MsgBox(0, "convert from base-10 to base-36", "Base-36 : " & $str &@CR& "Base-10 : " & $sum) Link to comment Share on other sites More sharing options...
Caja Posted May 15, 2012 Author Share Posted May 15, 2012 For anyone interested, I've figured it out... very proud of myself #include <String.au3> Dim $sum = "" Dim $str = "27985166" For $i = (36-1) To 0 Step -1 $single = Int($str / (36^$i)) $str = $str - ($single * (36^$i)) If $single > 0 And $single < 10 Then $sum = Chr(48 + $single) & $sum ElseIf $single >= 10 Then $sum = Chr(55 + $single) & $sum EndIf Next $sum = _StringReverse($sum) MsgBox(0, "convert from base-10 to base-36", "Base-36 : " & $sum) Link to comment Share on other sites More sharing options...
Spiff59 Posted May 16, 2012 Share Posted May 16, 2012 (edited) The routine I use to convert bases agrees with your result! Nicely done, and welcome to the forum Edit: Oops! lol "Member since 13-December 07" You're the silent type! Edit2: I use this which works for any combination of Binary, Octal, Decimal, Hexadecimal, or as I've just noticed, anything up to base 36: $result = _BaseToBase("F16", 16, 8) ; hex to octal MsgBox(0,"",$result) ;=================================================================================================================================== Func _BaseToBase($sIn, $iBaseIn, $iBaseOut) Local $sOut = 0 If $iBaseIn <> 10 Then ; iBaseIn to decimal $aVal = StringSplit($sIn, "") For $x = 1 to $aVal[0] $iDec = Asc($aVal[$x]) - (48 + ($aVal[$x] > "9") * 7) $sOut += $iDec * ($iBaseIn ^ ($aVal[0] - $x)) Next $sIn = $sOut EndIf If $iBaseOut <> 10 Then ; decimal to iBaseOut $sOut = "" While $sIn >= 1 $x = Mod($sIn, $iBaseOut) $sOut = Chr($x + 48 + ($x > 9) * 7) & $sOut $sIn = ($sIn - $x) / $iBaseOut WEnd EndIf Return $sOut EndFunc Edited May 21, 2012 by Spiff59 Link to comment Share on other sites More sharing options...
AZJIO Posted May 16, 2012 Share Posted May 16, 2012 Cajalink My other projects or all Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now