工作中遇到这么个名词:10进制bcd,16进制bcd。
于是乎各种的百度,查找资料,最终自己总结一下。(这里是常用的 8421)
关于bcd的解释是这样的,0~9(0到9的数字)用4位二进制来表示。原来这种10进制数字用二进制表示的机制就是10进制bcd。
16进制bcd呢,要将16进制的数字转换成10进制数字,再将10进制数字转换成二进制来表示。
例如:
单位10进制数字 ===>二进制
0 ===>0000,
1 ===>0001,
2 ===>0010,
3 ===>0011,
4 ===>0100,
5 ===>0101,
6 ===>0110,
7 ===>0111,
8 ===>1000,
9 ===>1001 。
这里网上也有在线转换工具:http://www.osgeo.cn/app/s3130
又例如:
多位10进制数字 ===>二进制
1 ===>0001,
11 ===>0001 0001,
111 ===>0001 0001 0001 。
16进制数字 ===>10进制数字 ===>二进制
C8 ===>200 ===>0010 0000 0000
封装成方法如下:
/**
* 10进制转bcd
* @param str 10进制数字 String.valueOf(int number);将10进制数字转成字符串传入此参数
* @return bcd码
*/
public static String DecimaltoBcd(String str){
String b_num="";
for (int i = 0; i < str.length(); i++) {
String b = Integer.toBinaryString(Integer.parseInt(str.valueOf(str.charAt(i))));
int b_len=4-b.length();
for(int j=0;j<b_len;j++){
b="0"+b;
}
b_num+=b;
}
return b_num;
}
/**
* 16进制转bcd
* 将16进制转成10进制,再将10进制转成bcd
* @param hex 16进制数字String.valueOf(int number);这里忽略16进制的前缀0x,只转后面的数字为字符串类型,将16进制数字转成字符串传入此参数
* @return bcd码
*/
public static String HextoBcd(String hex){
int decimal = Integer.parseInt(hex,16);
String bcd = DecimaltoBcd(String.valueOf(decimal));
return bcd;
}