BCD编码二进制与十进制之间的转换

道亦无名
博客专家认证
2015-01-14 09:31:38
编写一个函数,转换BCD编码二进制数为整型,比如0x00001234转换为1234。这里的BCD编码二进制数与二进制数有什么区别啊?用C语言实现
编写一个函数,转换整型数为BCD编码二进制数。比如1234转换为0x00001234。
...全文
1041 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35571235 2016-07-11
  • 打赏
  • 举报
回复
不懂你们在说啥,能不能有个靠谱点的讲讲其中的原理啊!!!
道亦无名 2015-01-14
  • 打赏
  • 举报
回复
这个问题终于有处理了
worldy 2015-01-14
  • 打赏
  • 举报
回复
简而言之,BCD编码是10进制编码,每4位表示一位数
道亦无名 2015-01-14
  • 打赏
  • 举报
回复
这个有负数的吗
falloutmx 2015-01-14
  • 打赏
  • 举报
回复
BCD跟二进制不一样的,常见的二进制编码是0000~1111,8421BCD码范围是0000~1001。你搜下8421的转换就知道了
道亦无名 2015-01-14
  • 打赏
  • 举报
回复
话说为什么在主函数中下面一段代码可以运行,
#include <math.h>
#include <stdio.h>
int main()
{
    int a = 0x5;
    int i,sum=0;
    int b = 0;
    int c = 0;
    for ( i = 1; i <= 8; i++ )
    {
        printf("%x\n",a);
        c = a&0x0000000f;
        if ( i == 8)
        {
            if( c == 1)
                break;
        }
        sum += c * pow(10,i-1);
        printf("%d\n", sum);
        a = a>>4;
    }
    if ( c == 1)
    {
        printf("-%d", sum);
    }
    else
    {
        printf("%d", sum);
    }
}
可是用函数模块就出现错误呢?
/* 编写一个函数,转换BCD编码二进制数为整型数。比如0x00001234转换为1234。*/
INT32 fun_two( INT32 i32_a)
{
	INT32 i32_i = 0, i32_c = 0, i32_sum = 0;

	for ( i32_i = 1; i32_i <= 8; i32_i++)
	{
		i32_c = i32_a & 0x0000000f;		/* 取最后一位 */
		if ( i32_i == 8)
		{
			if ( i32_c == 1)
				break;
		}
		i32_sum += i32_c * pow(10, (i32_i - 1));
		i32_a = i32_a >> 4;				/* 向左移四位 */
	}
	if ( i32_c == 1)   /* 判读符号位 */
	{
		OSM_Printf("-%d\n", i32_sum);
	}
	else
	{
		OSM_Printf("%d\n", i32_sum);
	}
}
这个运行的结果却不一样呢? 在调试的情况发现这里我在传参的时候 用十六进制,但是到函数内部的时候就会变为十进制了,不知道怎样可以解决这个问题呢?
o_range 2015-01-14
  • 打赏
  • 举报
回复
十进制的数字11用二进制表示是1011,用BCD码表示是00010001,就是我说的用四位二进制表示一位十进制说,如果十进制是15的话,用二进制表示是1111,而用BCD码是00010101。 BCD编码是可以表示负数的,但是有些单片机不支持~

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧