#define BCD_TO_DECIMAL(x) ((((x) & 0xf0) >> 4) * 10 + ((x) & 0x0f))
#define DECIMAL_TO_BCD(x) ((((x) / 10) << 4) + ((x) % 10))
* \brief 十六进制转bcd 用于把时间转换成底板的时间格式
* \param[int] hex 输入十六进制
* \return unsigned char 输出bcd码
unsigned char hex_to_bcd(unsigned char hex)
unsigned char bcd;
bcd=(hex/10*16)+(hex%10);
return bcd;
* \brief bcd时间格式转16进制格式 用于把底板的时间转换成16进制
* \param[int] bcd 输入bcd码
* \return unsigned char 输出16进制
unsigned char bcd_to_hex(unsigned char bcd)
unsigned char hex;
hex = (bcd/16*10)+(bcd % 16);
return hex;
两者各有优劣:
- 宏函数速度更快;
- 宏函数资源消耗更少;
- 宏函数不支持运算式代入, 会出现错误;
- 宏函数占用的代码量更大, 如果调用的地方很多, 会导致比使用函数应用大小较大;
- 啥是 BCD 码?
满意答案baotaoasdf12013.06.06采纳率:46%等级:13已帮助:12723人对于BCD码每四位代表一个十进制数字0-9,可以将BCD码转化为十进制,然后再将十进制转化为十六进制。下面是以8421BCD码为例编写的vc++6.0程序代码:#include #include #include using namespace std;int ConvertStringToInt...
如果要表示为十六进制,则转换为10进制数,前面加0x符号;(十六进制表示)(hex_to_dec)
如果要表示为十进制,则先转换为10进制数,前面加0x符号,再把加上符号的十六进制数转为十进制数;(十进制表示)(两次十六进制和十进制的转换)
BCD2HEX
如果这个数是16进制表示的,把0x符号去掉,当成10进制数直接转换为16进制数(bcd_to_hex16)
如果这个数是十进制表示的,先把这个数转换为16进制数,再把0x符号去掉,当成十进制数,
/////////////////////////////////////////////////////////////功能:十进制转十六进制////输入:int dec 待转换的十进制数据// int length 转换后的十六进制数据长度////输出:unsigned char *hex 转换后的十六进制数据////返回:0 success////思路:原理同十六进制转十进制////////...
//BCD转换成16进制数(例如:0x16转换成16)---读时钟使用(例如:读的秒=26代表:0x26,为BCD码,需要转换成十进制:38)
uint8_t BCDtoHEX(uint8_t BCD)
uint8_t tempData;
tempData = ...
unsigned int hexresult; //待转化的16进制数;
unsigned char bcdresult[5]; //转化后的bcd码存入数组;
void hex2bcd()
bcdresult[0]=hexresult%10;//个位
bcdresult[0]=(hexresult/10)%10;//十位
bcdresult[0]=(hexresult/10
十六进制十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。1、BCD码与十进制数的转换BCD码与十进制数的转换关系很直观,相互转换也很简单,将十进制数75.4转换为BCD码:...
在实际应用中需要转换超过255的十六进制数转换为BCD码,如0x123456,但是我找了半天没找到解决问题的方式,找到了也有很多问题,所以自己在理解这些代码后自己写一个。
先来一个我之前找到的一个版本,这个版本的问题在于,超过99后,转换的BCD码就乱了,出现0->99->0->99->0->55->100->199->100->199->100->155->200…以此类推的这样的循环。后面看代码发现这个限制,0...