﻿ 一种BCD码转换的算法

### 一种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!
");
62
63     Dec_to_BCD(1234567890, buf, 10);
64
65     for(i = 0; i < 5; i++)
66     {
67         printf("%#X
", buf[i]);
68     }
69
70
71     return 0;
72 } ```