概念
BCD (Binary-Coded Decimal) 是一种二进制的数字编码形式,其特点每个十进制数位用4个二进制位来表示。
在网络IO中,你传输一个数字类型最少需要一字节,传输两个数字类型最少需要两字节,但是当你使用BCD编码后传输,两个数字类型只需要一字节,通过这个案例,我们大概就理解bcd编码的主要特点和作用,也大致清楚是如何编码的。
最常用的BCD编码,就是使用"0"至"9"这十个数值的二进码来表示。这种编码方式,在中国大陆称之为“8421码”。当然还有其他有权和无权码,不再一一介绍。为什么叫8421?因为4个二进制位代码中从左至右看每一位“1”分别代表数字“8”“4”“2”“1”,故得名8421码。其中每一位“1”代表的十进制数称为这一位的权。因为每位的权都是固定不变的,所以8421码是恒权码。
图解过程
比如你想传输12这两个数字,那么编码过程将会如下所示:
每个字节代表两个十进制数位
工具类
/**
* 将BCD码数组转换为字符串。
* BCD (Binary-Coded Decimal) 是一种编码方式,其中每个十进制数位用4个二进制位来表示。
* 此方法将字节数组中的每个字节看作两个BCD编码的字符,并将它们转换为对应的字符后追加到字符串中。
*
* @param b BCD码数组,每个字节代表两个十进制数位。
* @return 转换后的字符串,其中每个字符代表一个十进制数位。
*/
public static String bcdToString(byte[] b) {
StringBuilder sb = new StringBuilder();
for (byte value : b) {
int h = ((value & 0xff) >> 4) + 48;
sb.append((char) h);
int l = (value & 0x0f) + 48;
sb.append((char) l);
}
return sb.toString();
}
总结:
如有理解错误的地方请指出