zoukankan      html  css  js  c++  java
  • 进制间的相互转换

    思路一:将数据转换为十进制,然后转换到对应进制。


    核心代码:

    	public static StringBuilder convert(String srcValue,int srcHex,int tarHex)
    	{
    		int num =0;
    		int t = 0,i=0;
    		char[] ch = srcValue.toCharArray();
    		for(;i<ch.length;i++)
    		{
    			if(ch[i]>='0' && ch[i]<='9')
    			{
    				t = ch[i] - '0';
    			}
    			else if(ch[i] >= 'A' && ch[i] <= 'F')
    			{
    				t = ch[i] - 'A' + 10;
    			}
    
    			num = num * srcHex + t;
    		}
    
    		i = 0;
    		StringBuilder sb = new StringBuilder(); 
    		while(num != 0)
    		{
    			t = num % tarHex;
    			char chTemp;
    			if(t>=0 && t<=9)
    			{
    				chTemp = (char)(t + '0');
    			}
    			else
    			{
    				chTemp = (char)(t - 10 + 'A');
    			}
    			sb.append(chTemp);
    			num /= tarHex;
    		}
    		return sb;
    	}

    测试实例:

    import java.util.*;
    class ConvertDemo 
    {
    	public static void main(String[] args) 
    	{
    		while(true)
    		{
    			System.out.println("请选择源数据的进制类型(2,8,10,16):");
    			int srcHex = inputHex();
    			System.out.println("请输入数据:");
    			Scanner sc = new Scanner(System.in);
    			String srcValue = sc.next();
    			System.out.println("请选择转换的进制(2,8,10,16):");
    			int tarHex = inputHex();
    			StringBuilder sbResult = convert(srcValue,srcHex,tarHex);
    			if(sbResult != null)
    				System.out.println(srcHex + "进制数:" + srcValue + "转换为" + tarHex + "进制,结果:"+ sbResult.reverse());
    			else
    				System.out.println("转换失败。");
    			System.out.println();
    		}
    	}
    
    	public static int inputHex()
    	{
    		Scanner sc = new Scanner(System.in);
    		while(true)
    		{
    			int k = sc.nextInt();
    			if(!(k == 2 || k == 8 || k == 10 || k==16))
    			{
    				System.out.println("进制输入不正确,是否继续(y/n)?");
    				String tip = sc.next();
    				if("n".equals(tip) || "N".equals(tip))
    				{
    					return -1;
    				}
    			}
    			else
    			{
    				return k;
    			}
    		}
    	}
    	public static StringBuilder convert(String srcValue,int srcHex,int tarHex)
    	{
    		int num =0;
    		int t = 0,i=0;
    		char[] ch = srcValue.toCharArray();
    		for(;i<ch.length;i++)
    		{
    			if(ch[i]>='0' && ch[i]<='9')
    			{
    				t = ch[i] - '0';
    			}
    			else if(ch[i] >= 'A' && ch[i] <= 'F')
    			{
    				t = ch[i] - 'A' + 10;
    			}
    
    			num = num * srcHex + t;
    		}
    
    		i = 0;
    		StringBuilder sb = new StringBuilder(); 
    		while(num != 0)
    		{
    			t = num % tarHex;
    			char chTemp;
    			if(t>=0 && t<=9)
    			{
    				chTemp = (char)(t + '0');
    			}
    			else
    			{
    				chTemp = (char)(t - 10 + 'A');
    			}
    			sb.append(chTemp);
    			num /= tarHex;
    		}
    		return sb;
    	}
    }
    


    方法二:

         //下面这三个方法分别转换成相应的进制。
            public static void toBin(int num,int x)
            {
                    System.out.print("您输入的"+x+"进制数的二进制形式是:");
                    trans(num,1,1);
            }
            public static void toOct(int num,int x)
            {
                    System.out.print("您输入的"+x+"进制数的八进制形式是:");
                    trans(num,7,3);
            }
            public static void toHex(int num,int x)
            {
                    System.out.print("您输入的"+x+"进制数的十六进制形式是:");
                    trans(num,15,4);
            }
            
            
    
            //trans():上边三个进制转换函数调用这个方法就可以完成进制的转换。
            public static void trans(int num, int base, int offset)
            {
                    if(num == 0)
                    {
                            System.out.println(0);
                            return;
                    }
    
                    char[] chs = {'0','1','2','3',
                                            '4','5','6','7',
                                            '8','9','A','B',
                                            'C','D','E','F'};
    
                    char[] arr = new char[32];
    
                    int pos = arr.length;
    
                    while(num != 0)
                    {
                            int temp = num & base;
                            arr[--pos] = chs[temp];
                            num = num >>> offset;
                    }
    
                    for(int i = pos; i < arr.length; i++)
                    {
                            System.out.print(arr[i]);
                    }
                    System.out.println();
                    System.out.println();
            }
    


    以上都只进行了整型的转换,浮点型没有。

  • 相关阅读:
    UVA11174村民排队问题
    UVA11174村民排队问题
    UVA11137(立方数之和)
    UVA11137(立方数之和)
    UVA11134传说中的车(放棋子)
    UVA11134传说中的车(放棋子)
    UVA11100旅行(大包装小包,问最少多少个包)
    UVA11100旅行(大包装小包,问最少多少个包)
    UVA11078开放式学分制(前面-后面的最大值)
    UVA11078开放式学分制(前面-后面的最大值)
  • 原文地址:https://www.cnblogs.com/dengshiwei/p/4258448.html
Copyright © 2011-2022 走看看