16进制转二进制

题目:一个字符串由两个(个位数或A~F)组成,翻译成二进制数组,如"3A"输出"111010","A3"输出"11110011"

package mytest;

import java.util.Stack;

/**
 * 题目:一个字符串由两个(个位数或A~F)组成,翻译成二进制数组,如"3A"输出"111010","A3"输出"11110011"
 * @author ephuizi
 * 2013/10/16
 */

public class BinaryTest{
    public static void main(String[] args) {
	System.out.println("2进制3A:" +getBinaryString("3A") );
        System.out.println("2进制A3:" +getBinaryString("A3") );
    }
    /**
     * 获取正整数的二进制字符串
     * @param n 正整数
     * @return 二进制字符串
     */
    static String intToBinaryString(int n){
    	String binary ="";
    	Stack<Integer> stack = new Stack<>();
    	if(n<0)
    		return binary;
    	do{
    		stack.push(n%2);
    		n>>=1;
    	}while(n != 0);
    	
    	int size =stack.size();
    	while(size++<4)
    		binary +=0;
    	
    	while(stack.size()>0)
    		binary += stack.pop();
    	return binary;
    }
    /**
     * 将字符0~9转成对应的整型0~9,A~F转成整型10~15
     * @param c 字符
     * @return 对应的整型
     */
    static int charToInt(char c){
    	char chars[] = "0123456789ABCDEF".toCharArray();
    	int n = 0;
    	for(int i=0; i<chars.length ;i++)
    		if(chars[i]==c) {
    			n=i;break;
    		}
    	return n;
    }
    
    /**
     * 十六进制字符串转成二进制字符串
     * @param s 十六进制字符串
     * @return 二进制字符串
     */
    static String getBinaryString(String s){
    	char[] chars = s.toCharArray();
    	s="";
    	for(int i=0; i<chars.length; i++){
    		if(i==0)
    			s+=delTopZero(intToBinaryString(charToInt(chars[i])));
    		else
    		s+=intToBinaryString(charToInt(chars[i]));
    	}
    	return s;
    }
    /**
     * 去掉二进制字符串头部的零
     * @param s 二进制字符串
     * @return 去零后的字符串
     */
    static String delTopZero(String s){
    	char[] chars = s.toCharArray();
    	int len = chars.length;
    	int i = 0;
    	for(; i<len; i++)
    		if(chars[i]!='0')
    			break;
    	int newLen = len-i;
    	char[] newChars = new char[newLen];
    	for(int j=0;j<newLen; j++)
    		newChars[j] = chars[i];
    	return new String(newChars);
    }
}

结果:


### 回答1: 16进制二进制是十分简单的,只需要将每一位的16进制数值换成对应的4位二进制数即可。 首先,我们需要了解16进制数系统的对应关系。16进制数系统中,0-9的数值与十进制数系统一样,分别对应0-9。然后,字母A-F分别对应十进制数值10-15,即A=10,B=11,C=12,D=13,E=14,F=15。 以换一个16进制数“C”的为例,我们可以按照如下步骤进行换: 1. 首先,将16进制数“C”换成对应的10进制数值。根据上述对应关系,C对应的十进制数值是12。 2. 将10进制数值12换成4位二进制数。除2取余法可以帮助我们实现这一换。将12除以2,商为6,余数为0。再将衍生出的6除以2,商为3,余数为0。最后将3除以2,商为1,余数为1。将得到的余数倒序排列,可得到12的二进制表示为1100。 所以,16进制数“C”换成二进制的结果是1100。 当然,如果要换的是多位数,只需按照上述步骤逐位进行换即可。 ### 回答2: 要将一个16进制换为二进制数,我们可以按照以下步骤进行: 1. 首先,我们需要知道16进制数中每个位的权重以及对应的二进制数。在16进制系统中,权重从右往左依次为16的0次方、16的1次方、16的2次方,以此类推。对应的二进制数依次为2的0次方、2的1次方、2的2次方,以此类推。具体如下: 16进制: 1 6 这里是指16.这是一个简单的例子,16进制中的每个数字范围是0-9和A-F(或a-f,不区分大小写),其中A对应10,以此类推直到F对应15。 权重: 16^1 16^0 所有位的权重由右往左依次递减。 二进制: 2^4 2^0 所有位的二进制数由右往左依次递增。 2. 将16进制数的每一位换为对应的4位二进制数。 对于16进制的每一位,将其对应的二进制数占据的4位写出来。例如,数值1对应的二进制数是0001,数值A对应的二进制数是1010,以此类推。 3. 将得到的4位二进制数依次相连得到最终的二进制数。 将第2步中换得到的4位二进制数依次相连,得到最终的二进制数。例如,将16进制数16换为二进制数的过程如下: 1. 分别将1和6换为对应的4位二进制数,得到0001和0110。 2. 将两个4位二进制数依次相连,得到最终的二进制数00010110。 综上所述,可以通过以上步骤将一个16进制换为二进制数。 ### 回答3: 16进制换成二进制是十进制换成二进制的一个特例。我们可以通过与二进制数的对应关系来进行换。 首先,需要记住16进制数的每一位与二进制数的对应关系: 0 -> 0000 1 -> 0001 2 -> 0010 3 -> 0011 4 -> 0100 5 -> 0101 6 -> 0110 7 -> 0111 8 -> 1000 9 -> 1001 A -> 1010 B -> 1011 C -> 1100 D -> 1101 E -> 1110 F -> 1111 然后,将给定的16进制数依次换成对应的二进制数即可。例如,要将十六进制数C换为二进制数,可以按照如下步骤进行: 1. 将C依次拆分成C=12,然后用对应的二进制数替代。C的二进制数为1100。 以此类推,可以将任意的16进制换为对应的二进制数。最后,将所有的二进制数串联在一起,即得到16进制数对应的二进制表示。 对于C,其16进制数为1100,对应的二进制数为1100。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值