Base conversion

From CodeCodex

Contents

[edit] Implementations

[edit] C++


/* A simple implementation of itoa (integer to string conversion)
and atoi (string to interger conversion). No error checking, and only works
with upper-case letters (use "DEADBEEF", not "deadbeef") */

#include <string>
#include <algorithm>
#include <cassert>

std::string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

std::string my_itoa(int src, int radix) {
        assert(radix >= 2 && radix <= 36);
        std::string str;
        for ( ; src > 0; src /= radix) {
                str += digits[src % radix];
        }
        std::reverse(str.begin(), str.end()); // reverse string
        return str;
}

int my_atoi(std::string src, int radix)
{
        assert(radix >= 2 && radix <= 36);
        int dest = 0;

        for (std::string::iterator i = src.begin(); i < src.end(); ++i) {
                dest = dest * radix + digits.find(*i);
        }

        return dest;
}

[edit] Java

Java's library already includes functions for doing this:


int num = Integer.parseInt(str, radix);
long num2 = Long.parseLong(str, radix);

String str = Integer.toString(num, radix);
String str = Long.toString(num2, radix);

[edit] JavaScript


var num = parseInt(str, radix);

var str = num.toString(radix);

[edit] Python


# Parsing string with base into a number is easy
num = int(str, radix)

# We have to write our own function for outputting to string with arbitrary base
def itoa(num, radix):
  result = ""
  while num > 0:
    result = "0123456789abcdefghijklmnopqrstuvwxyz"[num % radix] + result
    num /= radix
  return result

[edit] Ruby

Returns a string containing the representation of fix radix base (between 2 and 36).

str = 15.to_s(2)        #=> "1111"
str = 35.to_s(36)       #=> "z"

num = "ffff".to_i(16)   #=> 65535