如何将有符号数转化为BCD码?

    在做协议传输时,通常需要将数据转化为BCD码格式用于传输,例如水资源206通讯协议,通常我们在处理数据转化时,用的往往是无符号数的转化,也就是将unsigned int 或者unsigned long int 类型的数据转化为BCD码格式,这个相对来说比较方便,按照hex数转化为BCD码数据的计算方法转化就可以了,但是有些数据是有符号数格式的,比如水位数据,水位数据的真实值等于水位基值+水位传感器测量值,按照协议要求,水位的取值范围是-7999到+7999,当我们计算出负值的时候应该怎么转换呢?

    首先,我们要明白负数在单片机或者编译器中的存储格式,负数是以补码的形式存储的,这样我们在做hex数转化为BCD码数据的时候不能按照正数hex数转化为BCD码数的计算方法,这里推荐使用下面的方法:第一,我们判断一下计算结果是不是负数,如果是负数,那么我们先将其转化为正数;第二,我们按正常转化方法将此正数转化为BCD码;第三,手动添加负号,即最高位填负1,程序示例如下:

if(CurrentLevel<0)

{

    CurrentLevel = 0-CurrentLevel;

    Hex32ToBCD32(CurrentLevel,CurrentLevel_BCD);  //此函数为常用hex数转BCD码函数,比较简单

    CurrentLevel_BCD[3] =(CurrentLevel_BCD[3] | 0xF0); //206协议规定高四位表示符号位

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值