题目:一个字符串由两个(个位数或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);
}
}
结果: