求助

[复制链接]
2021|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
airwill 发表于 2013-9-22 14:22 | 显示全部楼层
本帖最后由 airwill 于 2013-9-22 14:24 编辑

楼上两位正解. 在早期的 x86 里提到这个 BCD 码, 在以前的 51 单片机的书里也有.
MCS51 还专门提供了 BCD 码加法用的指令 DA A. X86 也有 AAA 之类的指令, 不过现在随着 RAM 的容量不再紧张, 这些东西都不再使用了.
以至于很久没有看到书籍讲这个 BCD 码了
feilusia 发表于 2013-9-22 14:36 | 显示全部楼层
我记得这个是数电书里的基础知识部分的内容。
通常我们使用的都是十六进制数16进1,即0x0000~0xffff。
而BCD码是像十进制数一样,10进1,即0x0000~0x1001。就是说BCD码只有0~9,没有A~F。这样方便读数,但牺牲了一些位数,造成浪费。
zly0123yz 发表于 2013-9-22 17:24 | 显示全部楼层
一楼二楼正解啊。其实这个在通讯报文中用的比较多。什么bcd码,ascii码之类互转~
xxiao6130 发表于 2013-9-23 09:28 | 显示全部楼层
4楼正解,
 楼主| 806849108 发表于 2013-9-24 20:14 | 显示全部楼层
谢谢各位的回答 !
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部