打印

求助

[复制链接]
1547|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
806849108|  楼主 | 2013-9-22 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
将一个11位手机号码转换为6-BYTE的BCD码? 这个题目是什么意思?
沙发
outstanding| | 2013-9-22 13:02 | 只看该作者
  不清楚

使用特权

评论回复
板凳
peugeoter| | 2013-9-22 13:17 | 只看该作者
将0-9数字转换为4bit的BCD码,
0123456789表示为0x01,0x23,0x45,0x67,0x89 ?

使用特权

评论回复
地板
feilusia| | 2013-9-22 14:15 | 只看该作者
15892000300
0x01 0x58 0x92 0x00 0x03 0x00

使用特权

评论回复
5
airwill| | 2013-9-22 14:22 | 只看该作者
本帖最后由 airwill 于 2013-9-22 14:24 编辑

楼上两位正解. 在早期的 x86 里提到这个 BCD 码, 在以前的 51 单片机的书里也有.
MCS51 还专门提供了 BCD 码加法用的指令 DA A. X86 也有 AAA 之类的指令, 不过现在随着 RAM 的容量不再紧张, 这些东西都不再使用了.
以至于很久没有看到书籍讲这个 BCD 码了

使用特权

评论回复
6
feilusia| | 2013-9-22 14:36 | 只看该作者
我记得这个是数电书里的基础知识部分的内容。
通常我们使用的都是十六进制数16进1,即0x0000~0xffff。
而BCD码是像十进制数一样,10进1,即0x0000~0x1001。就是说BCD码只有0~9,没有A~F。这样方便读数,但牺牲了一些位数,造成浪费。

使用特权

评论回复
7
zly0123yz| | 2013-9-22 17:24 | 只看该作者
一楼二楼正解啊。其实这个在通讯报文中用的比较多。什么bcd码,ascii码之类互转~

使用特权

评论回复
8
xxiao6130| | 2013-9-23 09:28 | 只看该作者
4楼正解,

使用特权

评论回复
9
806849108|  楼主 | 2013-9-24 20:14 | 只看该作者
谢谢各位的回答 !

使用特权

评论回复
10
806849108|  楼主 | 2013-9-24 20:16 | 只看该作者
前几天去面试了,我写的一段代码 有问题吗?
unsigned char telephone_num[11]={1,8,6,8,2,1,2,1,1,3,8};
#include <stdio.h>
unsigned char *Teleph_to_BCD(unsigned char *tele_num);
int main()
{
        char i;
        unsigned char *ptr=NULL;
        ptr=Teleph_to_BCD(telephone_num);
        for(i=0;i<6;ptr++,i++)
        {
                printf("%02x\n" ,*ptr);
        }
        return 0;
}

//将两位电话号码合并成一个BCD字节  
unsigned char *Teleph_to_BCD(unsigned char *tele_num)
{
    unsigned char temp,i;
        static unsigned char bcd_num[6]={0,0,0,0,0,0};
        for(i=0;i<10;i=i+2)
        {
        temp=( (*tele_num) & 0x0f)<<4;
                tele_num++;
                temp|= (*tele_num) & 0x0f;
                bcd_num[i/2]=temp;
        }
        bcd_num[5]=telephone_num[10]&0x0f;
    return bcd_num;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

120

帖子

0

粉丝