zoukankan      html  css  js  c++  java
  • c语言中,如果将无符号数转换为有符号数


    在使用ti的adc芯片ads1259时,芯片是24为数据格式保存的,其中最高位是符号位,因此可以理解为是有符号数据,但是在嵌入式系统中,没有直接24位的变量,因此使用32的无符号先保存24位的数据。


    如果最高位不是1,那么很简单,直接乘以lsb对应的电压,即可得到真实的电压值。


    如果最高位1,说明是有符号的,因此,我们用无符号的32位保存的时候需要进行转换,其实,学过计算机基础的就知道补码的原理,在ads1259中,0xffffff是最小值-1,0x800000是负的最大值(这里说的是绝对值)。假如我们得到0x00A12CC8,说明是负值,那么如何转换到有符号的数据呢?


    c语言中有如下方法:

    unsigned int ua = 0x00A12CC8;
    int ib = (int)(ua-0xffffff)-1;
    int ic = ua | 0xff000000;
    printf("ib = %d 0x%x
    ",ib, ib);
    printf("ic = %d 0x%x
    ",ic, ic);
    输出的值如下
    ib = -6214456 0xffa12cc8
    ic = -6214456 0xffa12cc8
    

     那么吧ic或ib两个值保存乘以lsb对应的电压,保存到float变量中,就得到了负的电压值。

    当然,数据保存,格式转换要注意不能溢出。

  • 相关阅读:
    MVC3+Spring.net+NHibernate+ExtJs的简单架构
    WCF初见之Salt+Hash加密
    演讲时经常用到的几个小工具介绍
    2asp.net mvc 4 in action
    Hadoop简介和实践分享
    PyMongo非关系型数据库mongodb入门
    网络资源定位(Url)的奥秘
    ApplicationPoolIdentity
    CustomBehavior 入门
    架构培训
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11739478.html
Copyright © 2011-2022 走看看