将任意数转换为十六进制

package Binary;

import java.util.Scanner;
/**
 * 将任意数转换为十六进制
 * 思想:
 *   1、先获得任意数 num
 *   2、通过&运算,对每4个二进制位和二进制1111(十进制的15)运算,获取一次值。注意:取出的只是num二进制的最后4位
 *   3、再取4位,需要到无符号右移运算 num>>>4,然后进行循环
 *   4、将取出的值放到容器中,初步断定容器为int[],发现十六进制有子母,所以容器为char[]
 *   5、循环出来的是十六进制的倒序,并且包含了10-15数字,将其转换为a-f
 *   6、0+'0'输出是值,将其强转char类型,则为字符'0',则'0'只要加1-9之间的数字,再强转即为生成的字符'0'-'9'
 *   7、这样就取出了num的十六进制所有数字,并将其转成了有a-f可识别的十六进制,只要倒序输出即可
 *   8、输出发现,前边数值可能都是0,需将'0'去掉。通过if判断语句,当迭代出的数据不为'0'时,记录当前的下标,以此下标为字符长,进行
 *     循环输出。
 *   9、特殊情况,当输入值为0时,怎么办。多种测试,发现循环内的if语句判定不了,只能在num初始时进行判断
 *  10、以上将很好的输出所有的十六进制数字,只要加上0x即可。
 * @author Shoulder
 *
 */
public class BinaryToHex {
	public static void main(String[] args) {
		while(true)
		{
			System.out.println("转换十六进制");
			System.out.println("请输入要转变的值:");
			Scanner sc= new Scanner(System.in);
			int num = sc.nextInt();		//获得输入值
			int end_num = num;		//记录控制台输入的数字
			if(num==0)	//当输入值为0时,直接输出
			{
				System.out.println(num+"--转十六进制--0x0");
			}else{
				int temp = 0;	//记录4个二进制转换为十六进制生成的数
				char[] arr = new char[8];	//以字符数组类型记录转换成的十六进制(int32位,生成8个数字)
				for(int i=0;i<8;i++)
				{
					//4个二进制转换为十六进制。为了取出4位值,num&1111即是
					temp = num&15;
					//System.out.println(temp);
					//由于十六进制是从'0'-'9' 'a'-'f',生成的temp是int型,怎么转换呢,我们想到了ASCII码
					if(temp>9)
					{	//大于9的数字,'a'为固定值,若打'a'-'f',则需要1-6值,所以要-10,然后类似<9的方式
						temp = (char)(temp-10+'a');
						//System.out.println((char)(temp-10+'a'));
					}else{
						//小于9的数字,'0'的值为固定值,当0-9加'0'时,为固定值+(0-9),
						//所以转换为char类型时,为字符'0'-'9'
						temp = (char)(temp+'0');
					}
					arr[i] = (char)(temp);
					num = num>>>4;	//虽然记录了最后的4位,单原值没变,所以需要右移,记录下一个四位
					//System.out.println(num);
					//temp = num&15;
					//System.out.println(temp);
					//System.out.println("----");
				}
				System.out.print(end_num+"--转十六进制--0x");
				//由于生成的数组是十六进制的倒序,所以倒序输出
				for(int i=arr.length-1;i>=0;i--)
				{
					//System.out.print(arr[i]);
					//如果前位'0',则运行,知道第一位不为'0'的字符
					if(arr[i]!='0')
					{
						for(int j=i;j>=0;j--)
						{
							System.out.print(arr[j]);
						}
						//输出一次就终止循环,因为已取出所有的值
						break;
					}
				}
				System.out.println();
			}
		}
		//System.out.println();
		//System.out.println((char)(0+'0'));
		//System.out.println(Integer.toHexString(0));
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值