c语言中,如果将无符号数转换为有符号数
2023-09-11 14:15:08 时间
在使用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\n",ib, ib);
printf("ic = %d 0x%x\n",ic, ic);
输出的值如下
ib = -6214456 0xffa12cc8
ic = -6214456 0xffa12cc8
那么吧ic或ib两个值保存乘以lsb对应的电压,保存到float变量中,就得到了负的电压值。
当然,数据保存,格式转换要注意不能溢出。
相关文章
- (任意进制转换)将 r 进制数转成 k 进制数
- C# 对JS编码/解码进行转换
- 【短地址】网址缩短程序是怎么做的?10进制与62进制转换
- Java实现 LeetCode 538 把二叉搜索树转换为累加树(遍历树)
- 向数据库中插入一个DateTime类型的数据到一个Date类型的字段中,需要转换类型。TO_DATE('{0}','YYYY-MM-DD'))
- 【python cookbook】【数据结构与算法】19.同时对数据做转换和换算
- python轻松实现代码编码格式转换
- 405. 数字转换为十六进制数 ——【Leetcode每日一题】
- DateEdit控件时间格式转换
- 7-26 币值转换 (20 分)
- AI:一个20年程序猿的学习资料大全—结构分析软件/办公软件/电气制造控制/高级语言编程/平面三维设计/视频编辑/FQ格式转换软件——只有你不想要的,没有你找不到的
- Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换
- 使用Qt和C语言或者C++语言实现十、二、八、十六进制之间的转换(两种方法)
- QVariant转换与QString互转
- 非整数倍数据位宽转换:8to12