一种BCD码转换的算法

 1 #include "stdio.h"
 2
 3 typedef unsigned char            uint8_t;
 4 typedef unsigned short            uint16_t;
 5 typedef unsigned int            uint32_t;
 6 typedef unsigned long long        uint64_t;
 7
 8 /**
 9 ***************************************************************************************************
10 * @Brief     Decimal convert BCD code
11 * @Param     _Dec    Decimal    (Max: 2^64)
12 *            _Buf    BCD code buffer
13 *            _Num    Decimal digit
14 * @RetVal    None
15 * @Note      None
16 ***************************************************************************************************
17 */
18 void Dec_to_BCD(uint64_t _Dec, uint8_t* _Buf, uint8_t _Num)
19 {
20     uint8_t i, n;
21     uint8_t flag = 1;    /* BCD码高低字节存放控制标志 */
22
23     /* 内部计算 _Dec 的位数,可省去形参 _Num */
24     #if    0
25     uint8_t _Num;
26     uint64_t temp = _Dec;
27     do
28     {
29         _Num++;
30         temp /= 10;
31     }while(temp);
32     #endif
33
34     for(i = 0; i < _Num; i++)
35     {
36         if(flag)    /* 低字节 */
37         {
38             _Buf[i/2] = (_Dec % 10) & 0x0F;
39             flag = 0;
40         }
41         else        /* 高字节 */
42         {
43             _Buf[i/2] |= ((_Dec % 10) & 0x0F) << 4;;
44             flag = 1;
45         }
46         _Dec /= 10;
47     }
48 }
49
50
51
52
53
54
55 int main(void)
56 {
57     uint8_t i;
58     uint8_t buf[5] ={0};
59
60
61     printf("This is example!\n");
62
63     Dec_to_BCD(1234567890, buf, 10);
64
65     for(i = 0; i < 5; i++)
66     {
67         printf("%#X\n", buf[i]);
68     }
69
70
71     return 0;
72 } 

原文地址:https://www.cnblogs.com/skullboyer/p/8136902.html

时间: 2024-10-19 18:18:45

一种BCD码转换的算法的相关文章

BCD码转换成二进制和ASCII码

首先得知道什么是BCD码,可以看下百度,基本定义已经讲清楚了,百度链接:BCD码--百度百科:这里要说的也是最常用的一种BCD码:8421码.本文规定若没有特殊说明时,各个数值只会是十进制数.二进制数.ASCII值其中的一种进制数. BCD码是用4位二进制数(各个位的权重分别为:8421,所以叫8421码)来表示一位十进制数.这里的一位十进制数要特别说明下,一位十进制数只能是 0-9之间的一个数值.比如:6 就是表示一位十进制数6:66则是表示两位十进制数:666则是表示三位十进制数:(好像有点

C#下16进制和BCD码转换代码

[csharp] view plain copy private static Byte[] ConvertFrom(string strTemp) { try { if (Convert.ToBoolean(strTemp.Length & 1))//数字的二进制码最后1位是1则为奇数 { strTemp = "0" + strTemp;//数位为奇数时前面补0 } Byte[] aryTemp = new Byte[strTemp.Length / 2]; for (int

二进制转BCD码

应用: 用fpga实现对数码管显示,以前通常的方法是进行整除和取余进行运算,但是fpga并不擅长乘法除法运算,所以可以用BCD码来转换. BCD码:通俗的可以理解为用四位二进制数表示一位十进制数字.例如,256就可以用bcd码表示为:0010_1001_0110 因此在数码管显示中,也就是把256各位分出来,就可以用bcd码来表示,下面说一种二进制转换bcd码的方法. 加3移位法: bcd码中只有0~9十进制数,但是在四位二进制中是16进制进1,因此在移位过程中要对二进制进行判断,当在移位之后的

基于Verilog HDL的二进制转BCD码实现

在项目设计中,经常需要显示一些数值,比如温湿度,时间等等.在数字电路中数据都是用二进制的形式存储,要想显示就需要进行转换,对于一个两位的数值,对10取除可以得到其十位的数值,对10取余可以得到个位的数值.对于Verilog来说它的标准是支持除法和取余运算的,综合器也会有IP可以进行除法运算.但是这样未免会耗费太多资源,使用移位加3算法就可以实现二进制到BCD码之间的转换. BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码.用4位二进制数来表示1位十进制数中的

BCD码

BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码,是用4位二进制数来表示1位十进制数中的0~9这10个数码,用一种使用二进制编码十进制的数字编码形式.BCD码这种编码形式利用四个位元来储存一个十进制的数码,从而使二进制和十进制之间的转换得以更加快捷地进行.相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使计算机作浮点运算时所耗费的时间.此外,对于其他需要高精确度的计算,BCD编码亦很常用. 由于十进制数共有0.1.2.…….9十个数码,

BCD码与十进制

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

Binary 转 BCD 码

在数字电路中,经常会遇到进制转换问题,如二进制 (Binary) 转 BCD (Binary-Coded Decimal).针对这种数制的转换,有个很神奇的算法--double dabble algorithm,也称为 shift and add 3 algorithm. 其主要流程如下(摘自wiki-Double_dabble): Performed on the value 2431024310, looks like this: 但是为何这样工作就能得到BCD码呢? 我们考虑两个BCD码的

五种编程语言解释数据结构与算法—链式栈

目录 五种编程语言解释数据结构与算法-链式栈 1.栈的链式存储结构介绍 1.1.逻辑结构示意图 2.栈的应用 2.1.括号匹配问题 2.2.表达式求值问题 3.栈和递归的关系 4.C语言实现链式栈 4.1.LinkStack.h文件的内容 4.2.LinkStack.c文件中的内容 4.3.main.c文件中的内容 4.4.输出结果 5.C++语言来实现链式栈 5.1.LinkStack.h文件中的内容 5.2.LinkStack.cpp文件中的内容 5.3.main.cpp文件中的内容 5.4

BCD码干什么用的?

二进制编码的十进制(Binary Coded Decimal,BCD)数据类型在计算机系统中已经存在很久了.BCD格式经常用于简化对使用十进制数字的设备(比如必须向人显示数字的设备,如时钟和计时器)的处理.处理器不是把十进制数字转换为二进制数字以便进行数学操作,然后再转换回十进制:而是可以按照BCD格式保存数字并且执行数学操作.   BCD的名称就说明了它的作用,它按照二进制格式对十进制数字进行编码.每个BCD值都是一个无符号8位整数,值的范围是0到9.在BCD中,大于9的8位值被认为是非法的.