`
cuisuqiang
  • 浏览: 3960224 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3670063
社区版块
存档分类
最新评论

关于BCD编码 BCD与十进制转换

阅读更多
  • BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。
  • BCD码是四位二进制码, 也就是将十进制的数字转化为二进制, 但是和普通的转化有一点不同, 每一个十进制的数字0-9都对应着一个四位的二进制码,对应关系如下: 十进制0 对应 二进制0000 ;十进制1 对应二进制0001 ....... 9 1001 接下来的10就有两个上述的码来表示 10 表示为00010000 也就是BCD码是遇见1001就产生进位,不象普通的二进制码,到1111才产生进位10000
  • 在Java通信应用中,往往我们接收到数据流,而流是BCD编码后的。因此我们要转码来获得我们想要的十进制数据。下面的代码是BCD编码的数据流与十进制的转换,仅供参考。
package com.util;

/**
 * 编码工具类
 * 
 * @author 崔素强
 * @see BCD与十进制的转换
 */
public class BCDDecode {
	/**
	 * @功能:测试用例
	 * @参数: 参数
	 */
	public static void main(String[] args) {
		byte[] b = str2Bcd("2010");
		System.out.println(bcd2Str(b));
	}

	/**
	 * @功能: BCD码转为10进制串(阿拉伯数据)
	 * @参数: BCD码
	 * @结果: 10进制串
	 */
	public static String bcd2Str(byte[] bytes) {
		StringBuffer temp = new StringBuffer(bytes.length * 2);
		for (int i = 0; i < bytes.length; i++) {
			temp.append((byte) ((bytes[i] & 0xf0) >>> 4));
			temp.append((byte) (bytes[i] & 0x0f));
		}
		return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp
				.toString().substring(1) : temp.toString();
	}

	/**
	 * @功能: 10进制串转为BCD码
	 * @参数: 10进制串
	 * @结果: BCD码
	 */
	public static byte[] str2Bcd(String asc) {
		int len = asc.length();
		int mod = len % 2;
		if (mod != 0) {
			asc = "0" + asc;
			len = asc.length();
		}
		byte abt[] = new byte[len];
		if (len >= 2) {
			len = len / 2;
		}
		byte bbt[] = new byte[len];
		abt = asc.getBytes();
		int j, k;
		for (int p = 0; p < asc.length() / 2; p++) {
			if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {
				j = abt[2 * p] - '0';
			} else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {
				j = abt[2 * p] - 'a' + 0x0a;
			} else {
				j = abt[2 * p] - 'A' + 0x0a;
			}
			if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {
				k = abt[2 * p + 1] - '0';
			} else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {
				k = abt[2 * p + 1] - 'a' + 0x0a;
			} else {
				k = abt[2 * p + 1] - 'A' + 0x0a;
			}
			int a = (j << 4) + k;
			byte b = (byte) a;
			bbt[p] = b;
		}
		return bbt;
	}
}

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

2
0
分享到:
评论
1 楼 cuisuqiang 2013-06-24  
BCD码转为10进制串(阿拉伯数据) 时请注意:
return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp.toString().substring(1) : temp.toString();

这里把第一个零给截取了,请根据业务自行修正

相关推荐

    BCD编码 BCD与十进制转换_CBCD编码_BCDform_

    BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点...

    工程说明_verilog十进制转BCD码_

    在数字电路设计中,十进制到二进制补码表示(BCD,Binary-Coded Decimal)转换是一项基本任务,特别是在显示系统或者财务计算设备中。`Verilog`是一种广泛使用的硬件描述语言,用于设计数字逻辑系统。在这个工程中,...

    十进制数转换成BCD码(源码)

    在计算机科学和自动化控制领域,BCD码(Binary-Coded Decimal,二进制编码的十进制数)是一种用于表示十进制数的二进制编码方式。它将每个十进制位用四位二进制数来表示,使得数字处理更加直观且适合硬件实现。在...

    verilog 16进制转10进制bcd码

    本文档详细解析了一个Verilog程序,该程序实现了16进制数到二进制编码十进制(Binary Coded Decimal, BCD)格式的转换,并最终用于驱动数码管显示。在数字系统设计领域,这种转换是非常常见的需求之一,特别是在需要...

    JAVA二进制字节数组字符十六进制BCD编码转换.doc

    - 在Java中处理BCD编码通常涉及将十进制数转换为二进制数组,或将二进制数组解码回十进制数。示例代码没有包含直接处理BCD编码的函数,但你可以创建一个方法,将字节转换为BCD编码或从BCD编码还原。 4. **对象序列...

    BCD.rar_16二进制转bcd_bcd_bcd conversion_二进制转BCD码

    BCD码通常用于处理和存储与人类易读的十进制数相关的数据,尤其是在财务计算、计数器和显示器应用中。标题中的"BCD.rar_16二进制转bcd_bcd_bcd conversion_二进制转BCD码"表明这个压缩包包含了一个关于将16位二进制...

    BCD.rar_16进制_16进制转BCD_bcd 16进制_visual c_压缩BCD

    3. 压缩编码:根据选定的压缩BCD编码策略,将十进制数编码为二进制,可能需要进行位移和逻辑运算。 4. 组合结果:将压缩后的BCD码组合在一起形成最终的压缩型BCD码。 在提供的压缩包文件中,`ADC0_TEMP.c`可能是...

    八位二进制转bcd码

    在数字电子技术中,二进制编码十进制(Binary-Coded Decimal,简称BCD码)是一种将十进制数字转换为二进制表示的方法,常用于计算机系统中处理数值数据,特别是在显示和打印数字时。BCD码的主要优势在于它能直接映射...

    十进制二进制ASCIIBCD码转换工具

    有多种BCD编码方法,如8421编码、5421编码等,其中8421是最常见的,每一位二进制对应十进制数的权重分别是8、4、2和1。 在实际应用中,十进制、二进制、ASCII和BCD码之间的转换常常是必要的。例如,当我们需要在...

    16进制BCD转换

    每个十进制数位都用4个二进制位来表示,例如,十进制数5用BCD编码是0101,9是1001。这种编码方式确保了每四位二进制就能直接对应一个十进制数,便于进行十进制计算。 16进制到BCD的转换通常涉及到以下几个步骤: 1...

    基于Multisim的8位二进制转BCD码仿真

    74185是用途很广的芯片,它可以将二进制数转换成十进制BCD码。 但是,无论Multism还是Proteus,均没有74185的仿真模型。作者参考74185的Datasheet,利用分立元件制作了74185仿真电路,可将8位二进制数转换十进制BCD...

    基于Multisim的10位二进制转BCD码仿真

    74185是用途很广的芯片,它可以将二进制数转换成十进制BCD码。 但是,无论Multism还是Proteus,均没有74185的仿真模型。作者参考74185的Datasheet,利用分立元件制作了74185仿真电路,可将10位二进制数转换十进制BCD...

    VHDL 进制转换与BCD码加法

    BCD(Binary-Coded Decimal,二进制编码的十进制)是一种将十进制数用二进制表示的方式,每个十进制数位由4位二进制数表示。对于2位BCD码加法,我们需要处理两个两位的BCD码,并得到它们的和,同样保持BCD格式。 在...

    BCD.rar_bcd_bcd to decimal_二进制 BCD_单片机 BCD码_单片机二进制

    在电子和计算机科学领域,BCD(Binary-Coded Decimal,二进制编码的十进制)是一种用二进制表示十进制数的方法,尤其在单片机编程中广泛使用。BCD码允许我们直接存储和处理十进制数值,这对于处理与人类习惯的十进制...

    编写程序,接受从键盘输入的10个十进制数字,输入中遇到回车符则停止输入,各个数经过bcd码处理,以十六进制显示在屏幕上

    #### BCD码与十六进制转换原理 - **BCD码(Binary-Coded Decimal)**是一种编码方式,用来表示十进制数字,其中每个十进制数字用4位二进制表示。 - **十六进制表示**则是将二进制数每4位一组转换为一个十六进制字符...

    bcd.rar_bcd_bcd VHDL_二进制 BCD

    本话题主要关注BCD码(Binary-Coded Decimal,二进制编码的十进制)与二进制码之间的转换,特别是涉及到在VHDL中实现这种转换的逻辑电路。BCD码是一种特殊形式的二进制码,用来表示十进制数,每个十进制位用四位二...

    BCD码转换成16进制

    BCD码是一种将十进制数字编码为二进制形式的方法,其中每个十进制数字由四位二进制数表示,即每一位的值可以从0到9。而十六进制则是基数为16的进位计数制,常用A-F(或a-f)来表示10-15。 ### BCD码与十六进制的...

    mazhizhuanhuan2.rar_ABC_BCD码_bcd 码_进制转换

    完成这个任务可能需要掌握基本的编程知识,包括变量、循环、条件判断以及对二进制和十进制转换的理解。如果项目文件“mazhizhuanhuan2.docx”包含了代码示例或更详细的信息,那么它会提供解决这个问题的实用指导。

    16位二进制转化为BCD码.zip_16bit bcd_16位bcd码_16位bcd码范围_verilog_二进制 BCD

    在BCD编码中,每四位二进制代表一个十进制数,因此16位二进制数将被转换成4个两位的BCD数,每个BCD数代表原数的一个十进制位。 描述提到的“此代码可以实现16位二进制和BCD码之间的转换”,这意味着存在一段程序...

    8位二进制转BCD码.docx

    二进制转换为十进制的逻辑电路使用了一个 18 位的移位寄存器 `shift_reg`,它将输入的 8 位二进制数据与十进制数值进行比较,并执行移位操作以实现二进制转换为十进制的功能。在这个过程中,我们使用了一个计数器 `...

Global site tag (gtag.js) - Google Analytics