免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 18643 | 回复: 4
打印 上一主题 下一主题

怎么样把BCD码转换成十进制? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-15 13:13 |只看该作者 |倒序浏览
想把BCD码转换成十进制,请问怎样转换?

论坛徽章:
0
2 [报告]
发表于 2004-09-16 14:53 |只看该作者

怎么样把BCD码转换成十进制?

可以参考下面的c

int BCD2INT(unsigned char *pstr,int num,char * strTemp)
{

unsigned char ch,ch1;
int i,j;

i=0;

for(j=0;j<(num/2);j++)//这一个循环的意义何在?
{           //BCD码是将两个ASC压缩在一里面,所以长度除2

ch=pstr[j];
   //BCD 0X25 到ASC 就是 0x32 0x35 所以高四位要右移

ch1=(ch>;>;4); //这个(ch>;>;4)是何作用?
      //这句作用是将高四位数据右移四位
            //经过这一句 就会 ch1 = 0x02
if( ch1 >;= 0x0 && ch1 <= 0x9 )
strTemp[i++]=ch1+'0'; //还有这个。都看不明白,
   //这个+'0'就是把数字转换成ASC码 就是+0x30
else if ( ch1 == 0x0f )
break;

ch1=(ch&0x0f);   //这个是对低四位的处理,当然要把高四位清0
if( ch1 >;= 0x0 && ch1 <= 0x9 )
strTemp[i++]=ch1+'0';
else if ( ch1 == 0x0f )
break;

}

strTemp=0;
return 1;
}

论坛徽章:
0
3 [报告]
发表于 2007-06-06 10:07 |只看该作者

用C#或者JAVA更为简单

C#代码如下:
public int BCDToInt(byte bcd)
{
      return (0xff & (bcd>>4))*10 +(0xf & bcd);
}
是不是更简单?我是在编写CNGP的SP端程序时,发现其中的MSGID是采用BCD码的,楼上哥们用C实现的,看不懂,不知为何那么繁琐,还望高手给予指点。

论坛徽章:
0
4 [报告]
发表于 2007-06-06 10:15 |只看该作者
原帖由 binrongsd 于 2007-6-6 10:07 发表
C#代码如下:
public int BCDToInt(byte bcd)
{
      return (0xff & (bcd>>4))*10 +(0xf & bcd);
}
是不是更简单?我是在编写CNGP的SP端程序时,发现其中的MSGID是采用BCD码的,楼上哥们用C ...

你是一个字节,人家多个字节。BCD就是Binary Encoded Decimal,楼上的都是打包的BCD码,一个字节包含两个数字。

论坛徽章:
0
5 [报告]
发表于 2007-06-06 10:19 |只看该作者
原帖由 jsean 于 2004-9-16 14:53 发表
可以参考下面的c

int BCD2INT(unsigned char *pstr,int num,char * strTemp)
{

unsigned char ch,ch1;
int i,j;

i=0;

for(j=0;j<(num/2);j++)//这一个循环的意义何在?
{         ...


ch1=(ch>;>;4);
由于一个字节包含两个数字,所以前4位后4位各表示一个数字。
比如 二进制 00010002,表示12,前4位=0x01加上'0'就表示字符'1'了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP