Android Code Snippet Number base conversions

SubName: toDecimal, fromDecimal, fromDecimal2, toDecimal2, FromTo
Author: Unknown + derez

Description: Convert number to other base

Here are 3 subs that perform base conversion to and from decimal to base less then 10 - returns int, and to larger base - returns string.
Edit: added toDecimal2 to convert base greater then 10 (string) to decimal.
Edit: toDecimal2 improved and FromTo added

Code: Copy
'Convert integer in any base (2<=b<=10) to decimal integer.
Sub toDecimal( n As Int, base As Int) As Int
  Dim result As Int = 0
  Dim multiplier As Int = 1
  Do While n > 0
      result = result + (n Mod 10) * multiplier
      multiplier = multiplier * base
      n = n / 10
  Loop
  Return result
End Sub

'Convert decimal integer to any base (2<=b<=10) .
Sub fromDecimal(n As Int, base As Int) As Int
  Dim result As Int = 0
  Dim multiplier As Int = 1
  Do While n > 0
      result = result + (n Mod base) * multiplier
      multiplier = multiplier * 10
      n = n / base
  Loop
  Return result
End Sub

'Convert decimal integer to any base up to 20, returns string.
Sub fromDecimal2(n As Int, base As Int) As String
  Dim chars As  String ="0123456789ABCDEFGHIJ"
  Dim result As String = ""
  Do While n > 0
      result = chars.charAt(n Mod base) & result
      n = n / base
  Loop
  Return result
End Sub

'Convert any base up to 20 to decimal integer
Sub toDecimal2( n As String, base As Int) As Int
    n = n.ToUpperCase
   Dim result As Int = 0
   Dim st As String
   Dim chars As  String ="0123456789ABCDEFGHIJ"
   Dim k As Int = n.length - 1
   Dim multiplier As Int = 1
   For i =  k To 0 Step -1
       st = n.CharAt(i)
       result = chars.IndexOf(st) * multiplier  + result
       multiplier = multiplier * base
   Next
   Return result
End Sub

'Convert from one base to another, both must be less or equal to 10.
Sub FromTo(n As Int, frombase As Int, tobase As Int) As Int
   Dim t As Int = todecimal(n,frombase)
   Return fromDecimal(t,tobase)
End Sub

Tags : base conversion
 
Last edited:
Added toDecimal2 to convert base greater then 10 (string) to decimal.
 
Hi Derez

I'm trying to use your "toDecimal2" code to convert twelve digit [signed six byte] HEX to decimal. No matter what I do B4A operates as signed four byte hex. For example: FFFF,FFFF converts to -1, for signed six byte HEX I would get 4,294,967,295.
Is the signed 4 byte locked in to B4A or have I missed something simple.

Essence of the code below "Dim IP" emulates the input from keypad.

Any help greatly appreciated.

Regards Roger

Code: Copy
    Dim IP as String = "FFFFFFFF"
    Dim Result As Double = 0
    Dim InputStrChar As String
    Dim chars As  String = "0123456789ABCDEF"
    Dim StrLoop As Int
    Dim multiplier As Int = 1
    Dim InputStr As String
    InputStr = IP.ToUpperCase
    StrLoop = InputStr.length - 1
   
    If Radix_Flag = 16 AND input_flag = 1 Then
        If IP.Length < 13 Then
            For i =  StrLoop To 0 Step -1
               InputStrChar = InputStr.CharAt(i)
                Result = chars.IndexOf(InputStrChar) * multiplier  + Result
                multiplier = multiplier * Radix_Flag
            Next
            IP = Result
            Msgbox(Result, "RESULT")   'Gives -1
            Msgbox(IP, "IP")  'Gives -1
        Else
             Return False
        End If               
    End If
 
Many times, just putting the problem in the forum helps to solve it, even without any answer...
Thats a magic that Erel embedded in the forum :)
 

Similar Threads

Back
Top