使用C语言实现bcd码转十六进制数。

Anastasia47 2014-07-10 08:30:06
BCD码(Binary-Coded Decimal)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0-9这10个数码。例如:BCD码每四位表示一个十进制数。比如二进制数01111111,它对应的十进制数是127,1对应的BCD码(四位)为0001,2对应的BCD码为0010,7对应的BCD码为0111。合起来127对应的BCD码就是0001 0010 0111。
如何编程实现BCD码转十六进制数比如BCD码5(0101),怎么转成0x05?(使用C语言编程)。
...全文
4221 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39314918 2018-07-31
  • 打赏
  • 举报
回复
uchar bcd_hex(uchar bcd) //bcdÂëת»»³É16½øÖÆÊý
{
uchar temp = bcd & 0x0f;
bcd = bcd >> 4;
bcd %= 0xf;

return bcd *10 + temp;
}
赵4老师 2014-07-11
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十进制整数转二进制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
    strcpy(s,"a汉");
    i=0;
    while (1) {
        if (0==s[i]) break;
        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
        i++;
    }
    setlocale(LC_ALL,"chs");
    printf("s=%s,hs=%s\n",s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)
    strcpy(hs,"61BABA");
    i=0;
    while (1) {
        if (1!=sscanf(hs+i*2,"%2x",&v)) break;
        s[i]=(char)v;
        i++;
    }
    s[i]=0;
    printf("hs=%s,s=%s\n",hs,s);

    return 0;

}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a汉,hs=61BABA
//hs=61BABA,s=a汉
赵4老师 2014-07-11
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
unsigned int iv,i;
unsigned char BCD[5];//定长10位BCD码
unsigned char sv[11];
void main() {
    iv=123456789;//最大10位无符号正整数
    //INT2BCD
    sprintf(sv,"%010u",iv);
    for (i=0;i<10;i+=2) {
        BCD[i/2]=(sv[i]<<4)|(sv[i+1]&0x0F);
    }
    printf("BCD=%02x%02x%02x%02x%02x\n",BCD[0],BCD[1],BCD[2],BCD[3],BCD[4]);
    //BCD2INT
    for (i=0;i<10;i+=2) {
        sv[i]='0'|(BCD[i/2]>>4);
        sv[i+1]='0'|(BCD[i/2]&0x0F);
    }
    sscanf(sv,"%010u",&iv);
    printf("iv=%010u\n",iv);
    getch();
}
zilaishuichina 2014-07-10
  • 打赏
  • 举报
回复

	char *strBCD = "000100100111";
	int num = 0;
	for (int i = 4; i <= strlen(strBCD); i = i + 4)//长度不足4的部分将被舍去
	{
		num = num * 10 +
			(strBCD[i - 4] - '0') * 8 + 
			(strBCD[i - 3] - '0') * 4 + 
			(strBCD[i - 2] - '0') * 2 + 
			(strBCD[i - 1] - '0');
	}
  • 打赏
  • 举报
回复
引用 1 楼 zjq9931 的回复:
问题比较简单。 0101是内存中的二进制码,并不是字符型的“0101”吧? 第一步:把BCD码输出成10进制字符串,0101,输出成“5”,printf就可以做到。 然后用sscanf函数,可以将字符串型的“5”,转换成16进制的。
sprintf
  • 打赏
  • 举报
回复
问题比较简单。 0101是内存中的二进制码,并不是字符型的“0101”吧? 第一步:把BCD码输出成10进制字符串,0101,输出成“5”,printf就可以做到。 然后用sscanf函数,可以将字符串型的“5”,转换成16进制的。
计算机组成原理与汇编语言程序设计课后习题及解答 徐洁,俸远祯 电子工业出版社 第1章 习题一 1.什么是程序存储工作方式? 答:计算机的工作方式——存储程序工作方式。即事先编写程序,再由计算机把这些信息 存储起来,然后连续地、快速地执行程序,从而完成各种运算过程。 2.采用字化方法表示信息有哪些优点? 用字化方法表示信息的优点: (1)抗干扰能力强, 可靠性高。 (2)依靠多位字的组合,在表示值时可获得很宽的表示范围以及很高的精度。 (3)字化的信息可以存储、信息传送也比较容易实现。 (4)可表示的信息类型与范围及其广泛,几乎没有限制。 (5)能用逻辑代字逻辑技术进行信息处理,这就形成 了计算机硬件设计的基础。 3.如果有7×9点阵显示出字符A的图像,请用9个七位二进制代码表示A的点阵信息。 4.字计算机的主要特点是什么? 1. (1) 能在程序控制下自动连续地工作; (2")运算速度快; (3) 运算精度高; (4) 具有很强的信息存储能力; (5) 通用性强,应用领域及其广泛。 5.衡量计算机性能的基本指标有哪些? 答:衡量计算机性能的基本指标: (1)基本字长——参加一次运算的的位; (2)据通路宽度——据总线一次能并行传送的位; (3)运算速度——可用 CPU的时钟频率与主频, 每秒平均执行指令, 典型四则运算的 时间来表示。 (4)主存储器容量——可用字节或单元(字)×位来表示。 (5)外存容量——常用字节表示。 (6)配备的外围设备及其性能。 (7)系统软件配置。 7.系统软件一般包括哪些部分?列举你所熟悉的三种系统软件。 系统软件一般包括操作系统,编译程序、解释程序、各种软件平台等。例如WINDOWS98操 作系统,C语言编译程序等,据库管理系统。 8.对源程序的处理有哪两种基本方式? 对源程序的处理通常有两种处理方式:解释方式和编译方式。 第2章 习题二 1.将二进制(101010.01)2 换为十进制BCD码。 解:(101010.01)2 = (42.25)10 = (01000010.00100101)BCD 2.将八进制(37.2)8换为十进制BCD码. 解:(37.2)8 = (31.25)10 =(00110001.00100101)BCD 3.将十六进制(AC.E)换为十进制BCD码. 解: (AC.E)16 =(172.875)10 = (00010111001 4.将十进制(75.34)10换为8位二进制及八进制十六进制。 解: (75.34)10 = (01001011.01010111)2 =(213.256)8 =(4B.57)16 5.将十进制13/128换为二进制. 解: (13/128)10 =(1101/10000000)2 =(0.0001101)2 6.分别写出下列各二进制的原码、补码,字长(含一位符)为8位。 (1)0 (2)- 0 (3)0.1010 (4)- 0.1010 (5)1010 (6)-1010 解: 原码 补码 0 00000000 00000000 -0 10000000 00000000 0.1010 0.1010000 0.1010000 - 0.1010 1.1010000 1.0110000 1010 00001010 00001010 -1010 10001010 11110110 7.若X补=0.1010,则X原、真值等于什么? 解:X补=0.1010,则X原=0.1010,真值 X = 0.1010 8.若X补=1.1010,则X原、真值等于什么? 解:X补=1.1010,则X原=1.0110,真值 X = - 0.0110 9.某定点小字长16位,含1位符号,原码表示,分别写出下列典型值的二进制代码与十 进制真值。 (1)非0最小正 (2)最大正 (3)绝对值最小负 (4)绝对值最大负 解: 二进制代码 十进制真值 (1)非0最小正 0.000000000000001 2-15 1-2-15 (3)绝对值最小负 1.000000000000001 -2-15 (4)绝对值最大负 10.某定点小字长16位,含1位符号,补码表示,分别写出下列典型值的二进制代码与 十进制真值。 (1)非0最小正 (2)最大正 (3)绝对值最小负 (4)绝对值最大负 解: 二进制代码 十进制真值 (1)非0最小正 0.000000000000001 2-15 (4)绝对值最大负 1.000000000000000 -1 11.某浮点字长16位,其中阶码6位,含1位符号位,补码表示,以2为底;尾10位(含1位 符),补码表示,规格化。分别写出下
一、填空题(每空1分,共33分) 1. 一个计算机系统包括 硬件系统 和 软件系统 两大部分。 2. 一台计算机中全部程序的集合,称为这台计算机的为这台计算机的软件系统 。 3. 计算机软件可以分为 系统 软件和 应用 软件两大类。科学计算程序包属于 应用软件 ,诊断程序属于 系统软件 。 4. 一种用助忆符号来表示机器指令的操作符和操作的语言是 汇编语言 。 5. 据结构是一门研究非值计算的程序设计问题中计算机的操作对象 以及它们之间的 关系 和运算等的学科。 6. 据结构被形式地定义为(D, R),其中D是 据元素 的有限集合,R是D上的 关系 有限集合。 7. 据结构包括据的 逻辑关系 、据的 存储结构 和据的 运算 这三个方面的内容。 8. 据结构按逻辑结构可分为两大类,它们分别是 线性结构 和 非线性结构 。 9. 线性结构中元素之间存在 一对一线性 关系,树形结构中元素之间存在一对多层次 关系,图形结构中元素之间存在 多对多任意 关系。 10. 在线性结构中,第一个结点 没有 前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结 点 没有 后续结点,其余每个结点有且只有1个后续结点。 11. 在树形结构中,树根结点没有 直接前趋的 结点,其余每个结点有且只有 一 个前驱结点;叶子结点没有 直接后继的 结点,其余每个结点的后续结点可以有一个或多个直接后继 。 12. 在图形结构中,每个结点的前驱结点和后续结点可以 任意多个 。 13.据的存储结构可用四种基本的存储方法表示,它们分别是 顺序 、 链式 、 索引 和 散列 。 14. 据的运算最常用的有5种,它们分别是 插入 、 删除、修改、 查找 、排序 。 15. 一个算法的效率可分为 时间 效率和 空间 效率。 16. 任何一个C程序都由 MAIN主函 和若干个被调用的其它函组成。 17. 变量一经说明,就确定该变量的取值范围及 对该变量所能进行的运算 。 二、单项选择题(每小题1分,共15分) ( C ) 1. 通常所说的主机是指∶ A) CPU B) CPU和内存 C) CPU、内存与外存 D) CPU、内存与硬盘 ( C )2. 在计算机内部,一切信息的存取、处理和传送的形式是∶ A) ACSII码 B) BCD码 C)二进制 D)十六进制 ( D )3. 软件与程序的区别是∶ A) 程序价格便宜、软件价格昂贵; B) 程序是用户自己编写的,而软件是由厂家提供的; C) 程序是用高级语言编写的,而软件是由机器语言编写的; D) 软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序只是软件的一部分。 ( C )4. 所谓“裸机”是指∶ A) 单片机 B)单板机 C) 不装备任何软件的计算机 D) 只装备操作系统的计算机 ( D )5. 应用软件是指∶ A)所有能够使用的软件 B) 能被各应用单位共同使用的某种软件 C)所有微机上都应使用的基本软件 D) 专门为某一应用目的而编制的软件 ( A )6. C语言中的常量可分为整型常量、实型常量、字符型常量及 四种。
《单片机应用技术》课程标准 一、课程信息 课程名称:单片机应用技术 课程代码: 学时/学分: 4学分 适用专业:电子、通信类专业 先 修 课:电子应用技术,C语言等 后 续 课:电子产品维修等 开课学院或教研室: 执笔: 审核:(教研室主任签字) 日期: 年 月 审定:(学院院长签字) 日期: 年 月 二、课程性质与作用 《单片机应用技术》是电子通信类专业的专业核心课,也是理工科学生学习、掌握单片 机在控制领域应用开发的入门课程。本课程以51单片机为范例,以应用为出发点,使学 生在熟练掌握单片机的内部结构、工作原理、程序设计等内容的基础上,获得在相应专 业领域内应用单片机的初步能力,为毕业后的就业打下坚实的基础。 本课程计划教学学时为:64学时+2周(专周实训)。 三、本课程与其它课程关系 本课程在第三学期开设,在电子与通信课程体系中,本课程是一个培养综合技能和职 业岗位能力的课程,其相关课程如下表所示: "先修课程 "为本课程支撑的主要能力 "后续课程 "本课程提供的主要能力 " "电子技术 "具备使用电路分析思维与方 "电子设计 "提供具备使用单片机技术进 " "基础 "法进行电路分析与应用能力 "与自动化 "行电子应用辅助设计的能力 " "电子产品 "具备正确使用电工工具,仪 "智能产品 "提供运用单片机技术维修相 " "工艺 "表进行焊接、制作与装配能 "维修 "关智能产品的能力。 " " "力 " " " "电子应用 "具备典型电子电路设计、调 "毕业/综合"提供具备使用单片机技术进 " "技术 "试与应用能力 "设计 "行电子系统设计的能力 " "程序设计 "具备程序编写与设计能力 " " " 四、课程教育教学目标 1.知识目标 (1)熟悉80C51的内部结构以及工作原理; (2)掌握80C51单片机存储空间、SFR、工作寄存器的使用; (3)掌握C语言应用以及程序设计; (4)掌握MCS-51单片机定时/记器、中断以及串行口的使用 ; (5)熟悉掌握存储器及其典型接口的扩展及编程技术。 2.能力目标 (1)帮助学生熟悉80C51系列单片机的特征、内部接口电路和工作原理,学习C语言 的应用程序设计; (2)培养学生在自动化、检测技术、信号处理以及电力传动等领域应用单片机的能 力,培养学生设计和开发单片机应用系统的能力。 3.素质目标 (1)具备良好的工作态度、责任心。 (2)具有较强的团队意识和协作能力。 (3)具有较强的学习能力、吃苦耐劳精神。 (4)具有较强的语言表达能力和协调人际关系能力。 (5)具有认识自身发展重要性以及确立自身继续发展目标的能力。 五、课程教学内容和建议学时 第一章 80C51单片机基础 【教学内容】 1.1单片机及其发展应用 单片机的产生及发展 单片机、单片机系统及单片机应用系统 常用单片机简介 单片机的应用 1.2 80C51单片机的内部结构 80C51单片机和80C51系列单片机 80C51单片机的基本组成 80C51典型产品的资源配置 80C51的内部结构 80C51引脚功能 1.3 80C51单片机的存储器结构 程序存储器ROM 据存储器RAM 特殊功能寄存器 1.4 80C51单片机的并行I/O接口 并行I/O接口的结构特点 并行I/O接口的应用特性 并行I/O接口的负载能力 1.5 时钟与时序 时钟电路 CPU时序 1.6 复位电路 复位方式 复位方法 【目的要求】 理解:微型计算机的工作原理;单片机最小应用系统、单片机编程、烧录和运行的基 本概念,单片机时钟电路与输入输出口以及引脚的使用,注意"地址重叠"的问题和程序 状态字PSW中各位的含义。 熟练掌握:二进制、十进制、八进制十六进制及其之间的相互换;计算 机存储容量单位之间的换算关系;微型计算机的基本结构以及各个部分的主要功能;单 片机芯片内部的组成及存储器结构,特别是片内RAM和并行I/O口的使用方法。 在实训方面,主要掌握单片机应用系统的基本结构、设计过程、开发工具和方法;学 会硬件系统和软件系统的设计特点、原则、要点和方法;Keil C51的使用方法,包括项目文件的建立、修改、添加、编译、连接等;Keil C51的调试技巧,包括设置和删除断点、查看和修改寄存器内容、并行口和定时器/计 器的使用等技巧。 了解:BCD码和ASCII码的编码规则;单片机的发展、特点、基本组成、应用领域、学 习方法以及典型单片机系列的基本情况;单片机的硬件系统,存储器的分类和工作原理 ,SFR的功能介绍及使用方法。 【重点难点】 计算机中不同制之间的换,微型计算机的基本结构以及各个部分的主要功能,单 片机芯片内部的组成及存储器结构,特别是片内RAM和并行I/O口的使用方法。 【课时分配】6学时 【实训与作业】 单灯点

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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