打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
什么是BCD码?

什么是BCD码?

 

BCD码(Binary-Coded Decimal?)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代 码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因 为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时 间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。

来源:http://baike.baidu.com/view/45179.htm

 

BCD 编码解码函数如下:

/// <summary>/// BCD解码/// </summary>/// <param name="b"></param>/// <returns></returns>public static byte UnpackBCD(byte b){    //高四位    byte b1 = (byte)(b >> 4);    //低四位    byte b2 = (byte)(b & 0x0F);    return (byte)(b1 * 10 + b2);}/// <summary>/// BCD编码/// </summary>/// <param name="b"></param>/// <returns></returns>public static byte PackBCD(byte b){    //高四位    byte b1 = (byte)(b / 10);    //低四位    byte b2 = (byte)(b % 10);    return (byte)((b1<<4)|b2);}

 

BCD 编码测试,代码如下:

class Program{    // BCD编码    public static byte PackBCD(byte b)    {        //高四位        byte b1 = (byte)(b / 10);        //低四位        byte b2 = (byte)(b % 10);        return (byte)((b1 << 4) | b2);    }    static void Main(string[] args)    {        byte[] buff = new byte[2];        DateTime date = DateTime.Now;        byte in_Month = (byte)(date.Month);        byte in_Day = (byte)(date.Day);        Console.WriteLine(in_Month.ToString() +"  "+ in_Day.ToString());        buff[0] = PackBCD(in_Month);        buff[1] = PackBCD(in_Day);        Console.WriteLine(buff[0].ToString() + "  " + buff[1].ToString());        Console.ReadKey();    }}

结果如下:

可以看出,月份4进行BCD编码后没有改变,23日进行BCD编码后变成了35。

 

BCD 解码测试,代码如下:

class Program{    // BCD解码    public static byte UnpackBCD(byte b)    {        //高四位        byte b1 = (byte)(b >> 4);        //低四位        byte b2 = (byte)(b & 0x0F);        return (byte)(b1 * 10 + b2);    }    static void Main(string[] args)    {        byte[] buff = new byte[2] { 0x04, 0x23 };        Console.WriteLine(buff[0].ToString() + "  " + buff[1].ToString());        byte in_Month = UnpackBCD(buff[0]);        byte in_Day = UnpackBCD(buff[1]);        Console.WriteLine(in_Month.ToString() + "  " + in_Day.ToString());        Console.ReadKey();    }}

结果如下:

可以看出,月份4进行BCD解码后没有改变,35进行BCD解码后还原成了23日。

 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 进制之间的转换
扫描局域网mac地址
Url中文编码
C#编程总结(十)字符转码
环形缓冲区.ringbuff(C#和java)
16进制字符串与byte数组互转
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服