In Java how do you convert a decimal number to base 36?

后端 未结 11 1447
粉色の甜心
粉色の甜心 2020-11-29 04:55

If I have a decimal number, how do I convert it to base 36 in Java?

相关标签:
11条回答
  • 2020-11-29 05:25

    See the documentation for Integer.toString

    http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toString(int,%20int)

    toString
    
    public static String toString(int i, int radix)
    ....
    The following ASCII characters are used as digits:
    
       0123456789abcdefghijklmnopqrstuvwxyz
    

    What is radix? You're in luck for Base 36 (and it makes sense)
    http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#MAX_RADIX

    public static final int     MAX_RADIX   36
    
    0 讨论(0)
  • 2020-11-29 05:28

    Here is a method to convert base 10 to any given base.

     public char[]  base10Converter(int number, int finalBase) {
        int quo;
        int rem;
        char[] res = new char[1];
    
        do {
            rem = number % finalBase;
            quo = number / finalBase;
            res = Arrays.copyOf(res, res.length + 1);
            if (rem < 10) {
                //Converting ints using ASCII values
                rem += 48;
                res[res.length - 1] = (char) rem;
            } else {
                //Convert int > 9 to A, B, C..
                rem += 55;
                res[res.length - 1] = (char) rem;
            }
            number /= finalBase;
        } while (quo != 0);
    
    
        //Reverse array
        char[] temp = new char[res.length];
        for (int i = res.length - 1, j = 0; i > 0; i--) {
            temp[j++] = res[i];
        }
    
        return temp;
     }
    
    0 讨论(0)
  • 2020-11-29 05:29

    This code works:

    public class Convert {
    
        public static void main(String[] args) {
            int num= 2147483647;
            String text="ABCD1";
    
    
            System.out.println("num: " + num + "=>" + base10ToBase36(num));
            System.out.println("text: " +text + "=>" + base36ToBase10(text));
        }
    
        private static String codeBase36 = "0123456789abcdefghijklmnopqrstuvwxyz";
    
        //"0123456789 abcdefghij klmnopqrst uvwxyz"
        //"0123456789 0123456789 0123456789 012345"
    
    
        private static String max36=base10ToBase36(Integer.MAX_VALUE); 
    
        public static String base10ToBase36(int inNum) {
            if(inNum<0) {
                throw new NumberFormatException("Value  "+inNum +"  to small");
            }
            int num = inNum;
            String text = "";
            int j = (int)Math.ceil(Math.log(num)/Math.log(codeBase36.length()));
            for(int i = 0; i < j; i++){
                text = codeBase36.charAt(num%codeBase36.length())+text;
                num /= codeBase36.length();
            }
            return text;
        }
        public  static int base36ToBase10(String in) {
            String text = in.toLowerCase();
            if(text.compareToIgnoreCase(max36)>0) {
                throw new NumberFormatException("Value  "+text+"  to big");
            }
    
            if(!text.replaceAll("(\\W)","").equalsIgnoreCase(text)){
                throw new NumberFormatException("Value "+text+" false format");
            }
            int num=0;
            int j = text.length();
            for(int i = 0; i < j; i++){
                num += codeBase36.indexOf(text.charAt(text.length()-1))*Math.pow(codeBase36.length(), i);
                text = text.substring(0,text.length()-1);
            }
            return num;
        }
    
    
    }
    
    0 讨论(0)
  • 2020-11-29 05:30

    Given a number i, use Integer.toString(i, 36).

    0 讨论(0)
  • 2020-11-29 05:31

    This can be helpful to you.The operation being performed on the 4 digit alphanumeric String and decimal number below 1679615. You can Modify code accordingly.

    char[] alpaNum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
         String currentSeries = "";
        int num = 481261;
            String result = "";
            String baseConversionStr = "";
            boolean flag = true;
            do 
            {
                baseConversionStr = Integer.toString(num % 36) + baseConversionStr;
                String position = "";
                if(flag)
                {
                    flag = false;
                    position = baseConversionStr;
                }
                else
                {
                    position = Integer.toString(num % 36);
                }
                result += alpaNum[new Integer(position)];    
                num = num/36;
       }
            while (num > 0);
            
            StringBuffer number = new StringBuffer(result).reverse();
            
            String finalString = "";
            
            if(number.length()==1)
            {
                finalString = "000"+articleNo;
            }
            else if(number.length()==2)
            {
                finalString = "00"+articleNo;
            }
            else if(number.length()==3)
            {
                finalString = "0"+articleNo;
            }
            
            currentSeries = finalString;
    
    0 讨论(0)
  • 2020-11-29 05:32

    If you dont want to use Integer.toString(Num , base) , for instance, in my case which I needed a 64 bit long variable, you can use the following code: Using Lists in JAVA facilitates this conversion

    long toBeConverted=10000; // example, Initialized by 10000
    List<Character> charArray = new ArrayList<Character>();
    List<Character> charArrayFinal = new ArrayList<Character>();
    int length=10; //Length of the output string
    long base = 36;
    
                while(toBeConverted!=0)
                {
                    long rem = toBeConverted%base;
                    long quotient = toBeConverted/base;
                    if(rem<10)
                        rem+=48;
                    else
                        rem+=55;
                    charArray.add((char)rem);
                    toBeConverted=quotient;
                }
                // make the array in the reverse order
                for(int i=length-1;i>=0;--i){
                    if(i>=charArray.size()){
                        charArrayFinal.add((char) 48); // sends 0 to fix the length of the output List
                    } else {
                        charArrayFinal.add(charArray.get(i));
                    }
    
                }
    

    Example:

    (278197)36=5YNP

    0 讨论(0)
提交回复
热议问题