python BCD码转换10二进制转换bcd码数 比如内存数据为:

当前位置:
主题:600500 ┆ 帖子:4583597
┆ 今日新贴:798
昨日贴数:1371 ┆ 1历史最高贴数:2056
(日)在线用户:3871人
整数转换BCD码
给TA发消息
加TA为好友
发表于: 09:09:41 楼主
常常在看PLC的资料时,有关于转换指令,就是整数转换BCD码是如何转换的,相对应的计算公式是什么?同行指点一下吧,谢谢
给TA发消息
加TA为好友 发表于: 11:00:17 1楼
呵呵, BCD 用四位二进制来表示10进制的数据,范围是0-9999&& 直接可以在开始-菜单-附件-计算器 用16进制的格式来转换。
给TA发消息
加TA为好友 发表于: 11:23:56 2楼
其实开发PLC的人只是把这个计算公式封装成具体的PLC编程指令,方便我们调用,如果你要实现自己去写这样的指令,BCD码:用二进制表示的十进制,如就是62,你可以首先取出高位,转换成十进制乘以权数,依次类推就可以了。
给TA发消息
加TA为好友 发表于: 14:09:35 3楼
&&&& BCD码又称8421码,是一种将每一个10进制数位用4位二进制数表示的计数方式,其数据的表示范围是:0到9999.所谓的8421指的是:1000,这个表示的是8;0100表示的是4;0010表示的是2;0001表示的是1;相应地:1001表示:8+1=9;之类的,其它以此类推。比如像青岛黄工说的10进制的62,我们可以看到6表示为:0110,2表示为:0010,那么62的BCD码表示就为(62)十进制=()BCD码制。&&& 但是值得注意的是,这个转换成的BCD码不是二进制数,如不能通过将()BCD码制通过二进制的方式转换成十进制,因为这个是一种特殊的计算机码制。&&& 对于要将形如()BCD码制转换成十进制,我们一般是从低位到高位,每四位划分一次,高位不够四位可以补0的。如本例,可以划分为:(010 )BCD码制=(271)十进制码制。
给TA发消息
加TA为好友 发表于: 15:24:27 4楼
引用 玻璃的心 的回复内容:&&&& BCD码又称8421码,是一种将每一个10进制数位用4位二进制数表示的计数方式,其数据的表示范围是:0到9999.所谓的8421指的是:1000,这个表示的是8;0100表示的是4;0010表示的是2;0001表示的是1;相应地:1001表示:8+1=9;之类的,其它以此类推。比如像青岛黄工说的10进制的62,我们可以看到6表示为:0110,2表示为:0010,那么62的BCD码表示就为(62)十进制=()BCD码制。&&& 但是值得注意的是,这个转换成的BCD码不是二进制数,如不能通过将()BCD码制通过二进制的方式转换成十进制,因为这个是一种特殊的计算机码制。&&& 对于要将形如()BCD码制转换成十进制,我们一般是从低位到高位,每四位划分一次,高位不够四位可以补0的。如本例,可以划分为:(010 )BCD码制=(271)十进制码制。
给TA发消息
加TA为好友 发表于: 19:05:57 5楼
&&&&& BCD码又称8421码,是一种将每一个10进制的数用4位二进制的数来表示的记数形式,一个字节有8位,可容纳2位BCD码数,字节的低4位表示个位BCD码数,高4位表示十位的BCD码数。每4位的有效值(1)由低到高分别表示为1、2、4、8(对个位),10、20、40、80(对十位)....&&&& 整数通常是以16进制(即2进制)数的形式存放在存储器内,将整数转换为BCD码计算思路是这样:将原整数存放在M1区,M2为BCD码存放区,将M2清0,如最大整数&10000,则M2选用一个字存储器就够,计算过程是:先判断M1是否大于10进数8000(转算16进制数为1F40),如大于,用M1值 - 1F40,将差--&M1,M2加 1 ,如小于,不作减运算,接着将M2左移一位,再判断M1是否大于10进数4000(转算16进制数为0FA0),如大于,用M1值 - FA0,将差--&M1,M2加 1 如小于,不作减运算,接着将M2 左移一位.....接着按同样判断处理过程,判断、800、400、200、100、80、40、20、10,判断完10后,将M2左移4位,再将M1或到M2中,此时的M2即为转换BCD码数。
给TA发消息
加TA为好友 发表于: 00:44:29 6楼
谢谢各位讲解,特别是以四位为一组划分解释通俗易懂。
周好评排行周回复排行
[1] [0] [0] [1] [0] [0] [0] [0] [1] [1]
[2137] [44] [31] [28] [25] [24] [20] [17] [17] [16]最新求助
[1] [4] [0] [9] [2] [3] [10] [2] [0] [8]2进制-10进制(BCD码)数码转换器设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
2进制-10进制(BCD码)数码转换器设计
上传于||文档简介
&&2​进​制​-0​进​制​(​B​C​D​码​)​数​码​转​换​器​设​计​,​在​q​u​a​r​t​u​s​软​件​环​境​下​利​用​V​H​D​L​语​言​将​输​入​的​八​位​二​进​制​转​换​为​B​C​D​十​进​制​数​并​且​在​数​码​管​中​显​示​出​来
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩13页未读,继续阅读
你可能喜欢嵌入式入门(133)
C语言(91)
BCD码(Binary-Coded Decimal?)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。
/* 编写一个函数,转换BCD编码二进制数为整型数。比如0x转换为1234。*/
#include &math.h&
#include &stdio.h&
int main()
int a = 0x;
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)
sum += c * pow(10,i-1);
printf(&%d\n&, sum);
if ( c == 1)
printf(&-%d&, sum);
printf(&%d&, sum);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:154545次
积分:4643
积分:4643
排名:第4082名
原创:316篇
评论:30条
阅读:4035
阅读:2882
文章:12篇
阅读:5294
阅读:14833
(8)(3)(2)(4)(6)(4)(5)(14)(12)(17)(13)(11)(9)(6)(5)(2)(1)(1)(21)(47)(19)(15)(8)(24)(61)(2)(2)(1)(1)读了文章有一定的启发。不过与其转成hex string做转换,更加优雅且有效的方式应该是利用类型转换,拿unsigned char HEX[4] = {0x34, 0xFE, 0x3E, 0xFF}为例:signed long sLong = 0x34 && 24 | 0xFE && 16 | 0x3E && 8 | 0xFF如果想得到unsigned long,只需要改变数据类型即可:unsigned long sLong = 0x34 && 24 | 0xFE && 16 | 0x3E && 8 | 0xFF如果是双字节hex,则需要通过signed short和unsigned short进行转换。&&&&16进制 10进制 BCD码之间的转换
16进制 10进制 BCD码之间的转换
2278人阅读
#include &stdio.h&
#include &string.h&
/////////////////////////////////////////////////////
//功能:二进制取反
//输入:const unsigned char *src&& 二进制数据
//&&&&&& int length&&&&&&&&&&&&&&&& 待转换的二进制数据长度
//输出:unsigned char *dst&&&&&&&& 取反后的二进制数据
//返回:0&&&& success
//////////////////////////////////////////////////////
int convert(unsigned char *dst, const unsigned char *src, int length)
&&&&&&& for(i=0; i& i++)
&&&&&&&& {
&&&&&&&&&&&&&&&& dst[i] = src[i]^0xFF;
&&&&&&&& }
&&&&&&& return 0;
//////////////////////////////////////////////////////////
//功能:十六进制转为十进制
//输入:const unsigned char *hex&&&&&&&&& 待转换的十六进制数据
//&&&&&& int length&&&&&&&&&&&&&&&&&&&&&&& 十六进制数据长度
//返回:int&& rslt&&&&&&&&&&&&&&&&&&&&&&&& 转换后的十进制数据
//思路:十六进制每个字符位所表示的十进制数的范围是0 ~255,进制为256
//&&&&&& 左移8位(&&8)等价乘以256
/////////////////////////////////////////////////////////
unsigned long HextoDec(const unsigned char *hex, int length)
&&&& unsigned long rslt = 0;
&&& for(i=0; i& i++)
&&&&&&&& rslt += (unsigned int)(hex[i])&&(8*(length-1-i));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &
/////////////////////////////////////////////////////////
//功能:十进制转十六进制
//输入:int dec&&&&&&&&&&&&&&&&&&&&& 待转换的十进制数据
//&&&&&& int length&&&&&&&&&&&&&&&&&& 转换后的十六进制数据长度
//输出:unsigned char *hex&&&&&&&&&& 转换后的十六进制数据
//返回:0&&&& success
//思路:原理同十六进制转十进制
//////////////////////////////////////////////////////////
int DectoHex(int dec, unsigned char *hex, int length)
&&& for(i=length-1; i&=0; i--)
&&&&&&&& hex[i] = (dec%256)&0xFF;
&&&&&&&& dec /= 256;
&&& return 0;
/////////////////////////////////////////////////////////
//功能:求权
//输入:int base&&&&&&&&&&&&&&&&&&&& 进制基数
//&&&&&& int times&&&&&&&&&&&&&&&&&&& 权级数
//返回:unsigned long&&&&&&&&&&&&&&& 当前数据位的权
//////////////////////////////////////////////////////////
unsigned long power(int base, int times)
&&&& unsigned long rslt = 1;
&&& for(i=0; i& i++)
&&&&&&&& rslt *=
/////////////////////////////////////////////////////////
//功能:BCD转10进制
//输入:const unsigned char *bcd&&&&& 待转换的BCD码
//&&&&&& int length&&&&&&&&&&&&&&&&&&& BCD码数据长度
//返回:unsigned long&&&&&&&&&&&&&&& 当前数据位的权
//思路:压缩BCD码一个字符所表示的十进制数据范围为0 ~ 99,进制为100
//&&&&&& 先求每个字符所表示的十进制值,然后乘以权
//////////////////////////////////////////////////////////
unsigned long&& BCDtoDec(const unsigned char *bcd, int length)
&&&& int i,
&&&&& unsigned long dec = 0;
&&&& for(i=0; i& i++)
&&&&&&&& tmp = ((bcd[i]&&4)&0x0F)*10 + (bcd[i]&0x0F);& &
&&&&&&&& dec += tmp * power(100, length-1-i);&&&&&&&& &
/////////////////////////////////////////////////////////
//功能:十进制转BCD码
//输入:int Dec&&&&&&&&&&&&&&&&&&&&&& 待转换的十进制数据
//&&&&&& int length&&&&&&&&&&&&&&&&&&& BCD码数据长度
//输出:unsigned char *Bcd&&&&&&&&&&& 转换后的BCD码
//返回:0&& success
//思路:原理同BCD码转十进制
//////////////////////////////////////////////////////////
int DectoBCD(int Dec, unsigned char *Bcd, int length)
&&&& for(i=length-1; i&=0; i--)
&&&&&&&&& temp = Dec%100;
&&&&&&&&& Bcd[i] = ((temp/10)&&4) + ((temp%10) & 0x0F);
&&&&&&&&& Dec /= 100;
&&&& return 0;
int main()
&&&& unsigned char tmp_bff[12] = "";
&&& //十六进制转十进制
&&&& unsigned char HEX[4] = {0x34, 0xFE, 0x3E, 0xFF};
&&&& unsigned long dec_hex = 0;
&&&& dec_hex = HextoDec(HEX, 4);
&&&& printf("dec_hex = %d\n", dec_hex);
&&& //十进制转十六进制
&&&& DectoHex(dec_hex, tmp_bff, 4);
&&& for(i=0; i&5; i++)
&&&&&&&& printf("tmp_bff[%d] = 0x%02X\n",i, tmp_bff[i]);
&&& //BCD码转十进制
&&&& unsigned long dec_bcd = 0;
&&&& unsigned char BCD[4] = {0x98, 0x23, 0x45, 0x78};
&&&& dec_bcd = BCDtoDec(BCD, 4);
&&&& printf("dec_bcd = %d\n", dec_bcd);
&&& //十进制转BCD码
&&&& DectoBCD(dec_bcd, tmp_bff, 4);
&&& for(i=0; i&5; i++)
&&&&&&&& printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]);
&&&& getchar();
16进制、10进制、BCD码之间的转换
#include &stdio.h&
#include &string.h&
/////////////////////////////////////////////////////
//功能:二进制取反
//输入:const unsigned char *src&& 二进制数据
//&&&&&& int length&&&&&&&&&&&&&&&& 待转换的二进制数据长度
//输出:unsigned char *dst&&&&&&&& 取反后的二进制数据
//返回:0&&&& success
//////////////////////////////////////////////////////
int convert(unsigned char *dst, const unsigned char *src, int length)
&&&&&&& for(i=0; i& i++)
&&&&&&&& {
&&&&&&&&&&&&&&&& dst[i] = src[i]^0xFF;
&&&&&&&& }
&&&&&&& return 0;
//////////////////////////////////////////////////////////
//功能:十六进制转为十进制
//输入:const unsigned char *hex&&&&&&&&& 待转换的十六进制数据
//&&&&&& int length&&&&&&&&&&&&&&&&&&&&&&& 十六进制数据长度
//返回:int&& rslt&&&&&&&&&&&&&&&&&&&&&&&& 转换后的十进制数据
//思路:十六进制每个字符位所表示的十进制数的范围是0 ~255,进制为256
//&&&&&& 左移8位(&&8)等价乘以256
/////////////////////////////////////////////////////////
unsigned long HextoDec(const unsigned char *hex, int length)
&&&& unsigned long rslt = 0;
&&& for(i=0; i& i++)
&&&&&&&& rslt += (unsigned int)(hex[i])&&(8*(length-1-i));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &
/////////////////////////////////////////////////////////
//功能:十进制转十六进制
//输入:int dec&&&&&&&&&&&&&&&&&&&&& 待转换的十进制数据
//&&&&&& int length&&&&&&&&&&&&&&&&&& 转换后的十六进制数据长度
//输出:unsigned char *hex&&&&&&&&&& 转换后的十六进制数据
//返回:0&&&& success
//思路:原理同十六进制转十进制
//////////////////////////////////////////////////////////
int DectoHex(int dec, unsigned char *hex, int length)
&&& for(i=length-1; i&=0; i--)
&&&&&&&& hex[i] = (dec%256)&0xFF;
&&&&&&&& dec /= 256;
&&& return 0;
/////////////////////////////////////////////////////////
//功能:求权
//输入:int base&&&&&&&&&&&&&&&&&&&& 进制基数
//&&&&&& int times&&&&&&&&&&&&&&&&&&& 权级数
//返回:unsigned long&&&&&&&&&&&&&&& 当前数据位的权
//////////////////////////////////////////////////////////
unsigned long power(int base, int times)
&&&& unsigned long rslt = 1;
&&& for(i=0; i& i++)
&&&&&&&& rslt *=
/////////////////////////////////////////////////////////
//功能:BCD转10进制
//输入:const unsigned char *bcd&&&&& 待转换的BCD码
//&&&&&& int length&&&&&&&&&&&&&&&&&&& BCD码数据长度
//返回:unsigned long&&&&&&&&&&&&&&& 当前数据位的权
//思路:压缩BCD码一个字符所表示的十进制数据范围为0 ~ 99,进制为100
//&&&&&& 先求每个字符所表示的十进制值,然后乘以权
//////////////////////////////////////////////////////////
unsigned long&& BCDtoDec(const unsigned char *bcd, int length)
&&&& int i,
&&&&& unsigned long dec = 0;
&&&& for(i=0; i& i++)
&&&&&&&& tmp = ((bcd[i]&&4)&0x0F)*10 + (bcd[i]&0x0F);& &
&&&&&&&& dec += tmp * power(100, length-1-i);&&&&&&&& &
/////////////////////////////////////////////////////////
//功能:十进制转BCD码
//输入:int Dec&&&&&&&&&&&&&&&&&&&&&& 待转换的十进制数据
//&&&&&& int length&&&&&&&&&&&&&&&&&&& BCD码数据长度
//输出:unsigned char *Bcd&&&&&&&&&&& 转换后的BCD码
//返回:0&& success
//思路:原理同BCD码转十进制
//////////////////////////////////////////////////////////
int DectoBCD(int Dec, unsigned char *Bcd, int length)
&&&& for(i=length-1; i&=0; i--)
&&&&&&&&& temp = Dec%100;
&&&&&&&&& Bcd[i] = ((temp/10)&&4) + ((temp%10) & 0x0F);
&&&&&&&&& Dec /= 100;
&&&& return 0;
int main()
&&&& unsigned char tmp_bff[12] = "";
&&& //十六进制转十进制
&&&& unsigned char HEX[4] = {0x34, 0xFE, 0x3E, 0xFF};
&&&& unsigned long dec_hex = 0;
&&&& dec_hex = HextoDec(HEX, 4);
&&&& printf("dec_hex = %d\n", dec_hex);
&&& //十进制转十六进制
&&&& DectoHex(dec_hex, tmp_bff, 4);
&&& for(i=0; i&5; i++)
&&&&&&&& printf("tmp_bff[%d] = 0x%02X\n",i, tmp_bff[i]);
&&& //BCD码转十进制
&&&& unsigned long dec_bcd = 0;
&&&& unsigned char BCD[4] = {0x98, 0x23, 0x45, 0x78};
&&&& dec_bcd = BCDtoDec(BCD, 4);
&&&& printf("dec_bcd = %d\n", dec_bcd);
&&& //十进制转BCD码
&&&& DectoBCD(dec_bcd, tmp_bff, 4);
&&& for(i=0; i&5; i++)
&&&&&&&& printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]);
&&&& getchar();
发表评论:
TA的最新馆藏[转]&

我要回帖

更多关于 bcd码转换成十六进制 的文章

 

随机推荐