主题:求INT转BCD和BCD转INT的函数
lzfwan
[专家分:0] 发布于 2010-07-31 12:49:00
在做通讯的时候,有字段类型指定是BCD的,我该如何转换,字付串比如:“12345”,我可以转换成01 23 45 这样占三个字节是对的么?
但是整型呢,我该如何转,比如有个长度123,规定类型是BCD的,我该如何转?还是只能把123当成字符串的"123"来转?请赐都。。
如果有INT转BCD和BCD转INT的函数,请贴出来让我提高一下,万分感谢。
回复列表 (共13个回复)
沙发
cxxcomp [专家分:2370] 发布于 2010-07-31 18:59:00
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
unsigned long BCDToDec(const unsigned char *bcd, int length)
{
int tmp;
unsigned long dec = 0;
for(int i = 0; i < length; i++)
{
tmp = ((bcd[i] >> 4) & 0x0F) * 10 + (bcd[i] & 0x0F);
dec += tmp * pow(100, length - 1 - i);
}
return dec;
}
int DecToBCD(int Dec, unsigned char *Bcd, int length)
{
int tmp;
for(int i = length - 1; i >= 0; i--)
{
tmp = Dec % 100;
Bcd[i] = ((tmp / 10) << 4) + ((tmp % 10) & 0x0F);
Dec /= 100;
}
return 0;
}
int main(int, char **, char **)
{
//BCD码转十进制
typedef unsigned char byte;
unsigned long dec_bcd = 0;
byte BCD[4] = {0x98, 0x23, 0x45, 0x78};
byte tmp_buf[12] = "";
dec_bcd = BCDToDec(BCD, 4);
printf("dec_bcd = %d\n", dec_bcd);
//十进制转BCD码
DecToBCD(dec_bcd, tmp_buf, 4);
for(int i = 0; i < 5; i++)
{
printf("tmp_bff[%d] = 0x%02X\n", i, tmp_buf[i]);
}
system("pause");
return 0;
}
板凳
qq23860138 [专家分:0] 发布于 2010-08-01 16:56:00
真的很不错啊!真的很不错啊!真的很不错啊!真的很不错啊!真的很不错啊!
3 楼
qq23860138 [专家分:0] 发布于 2010-08-01 18:07:00
真的很不错啊!真的很不错啊!真的很不错啊!真的很不错啊!
4 楼
qq23860138 [专家分:0] 发布于 2010-08-01 18:08:00
1234567898765432347876543234567876后来居上
5 楼
qq23860138 [专家分:0] 发布于 2010-08-01 18:10:00
真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!
6 楼
qq23860138 [专家分:0] 发布于 2010-08-01 18:10:00
真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!真的很不错,好地方!
7 楼
qq23860138 [专家分:0] 发布于 2010-08-01 18:11:00
这里是什么地方啊!
8 楼
qq23860138 [专家分:0] 发布于 2010-08-01 18:11:00
快来学习一下吧!快来学习一下吧!快来学习一下吧!快来学习一下吧!
9 楼
qq23860138 [专家分:0] 发布于 2010-08-01 18:12:00
真的很不错啊!!!
10 楼
qq23860138 [专家分:0] 发布于 2010-08-01 18:13:00
真的要好好学习一下!
我来回复