十进制转为十六进制

实现一个函数将一个字符串转为十六进制数值字符串。如输入字符串“15”,则十六进制串为:“F”;如输入“32”,则为“20”;

如输入“163”,则为“A3”。要求不得使用atoi、printf、sprintf、Integer.parseString、String.parseInt、Long.vauleOf、

Integer.valueOf等系列方法。

思路:首先将字符串字符串转成十进制数字,然后再转换成十六进制字符。

import java.io.IOException;


public class StringToHex {

	public static void main(String[] args) {
		
		String str = getInputMessage();
		long decDigit = stringToDec(str);
		String HexString = stringToHex(decDigit);
		System.out.println(HexString);
		
	}
	/**
	 * 十进制数转换为十六进制字符串
	 * @param decDigit
	 * @return
	 */
	private static String stringToHex(long decDigit) {
		
		if (decDigit == 0) {
			return "0";
		}
		//判断是否为负
		boolean isNegative = false;
		
		if (decDigit < 0 ) {
			isNegative = true;
			decDigit = 0 - decDigit;
		}
		String hexStr = "";
		int a = 0 ;
		long b = 0;
		while(decDigit>0){
			b = decDigit / 16;
			a =(int) (decDigit- b*16);
			decDigit = b;
			if (a>=10) {
				switch (a) {
				case 10:
					hexStr ='A'+hexStr;
					break;
				case 11:
					hexStr ='B'+hexStr;
					break;
				case 12:
					hexStr ='C'+hexStr;
					break;
				case 13:
					hexStr ='D'+hexStr;
					break;
				case 14:
					hexStr ='E'+hexStr;
					break;
				case 15:
					hexStr ='F'+hexStr;
					break;
				default:
					break;
				}
			}
			else{
				hexStr =a +hexStr;
			}
		}
		if (isNegative) {
			return '-'+hexStr;
		}
		return hexStr;
	}
	/**
	 * 	//从字符串转化成十进制数
	 * @param str 
	 * @return
	 */
	private static long stringToDec(String str) {
		//假设原字符串是合法的,而且长度不超过32位.
		long decDigit = 0;
	
		boolean isNegative = false;
		for (int i = str.length()-1; i >= 0; i--) {
			if (str.charAt(i)=='-') {
				isNegative = true;
				break;
			}
			else
				decDigit = decDigit+(long) ((str.charAt(i) - '0')*Math.pow(10, str.length()-i-1));
		}
		if (isNegative) {
			decDigit = 0 - decDigit;
		}
		return decDigit;
	}
	public static String getInputMessage(){
//        System.out.println("请输入您的命令∶");
        byte buffer[]=new byte[1024];
        int count = 0;
		try {
			count = System.in.read(buffer);
		} catch (IOException e) {
			e.printStackTrace();
		}
        char[] ch=new char[count-2];//最后两位为结束符,删去不要
        for(int i=0;i<count-2;i++)
            ch[i]=(char)buffer[i];
        String str=new String(ch);
        return str;
    }
}


你可能感兴趣的:(十进制转为十六进制)