24位有符号数转32位有符号数最简单方法
最近第一次用24位ADC,用SPI读取的数据是24位有符号数。
众所周知,数据的最高位是符号位,那么24位数据的第24位是符号位,而在C语言中24位数据只能用32位变量存储,32位变量的符号位很明显在第32位,直接赋值是不会有负数的。
网上看了很多方法,什么用指针,什么把24位数据分成3个8位,什么取反再+1,乱七八糟一堆不说,代码又长,居然还有很多文章的结果算出来是错的,差点被他们绕进去。
那么问题来了
24位数据转为32位数据是怎么回事呢?24位数据相信大家都很熟悉,但是24位数据转为32位数据是怎么回事呢,下面就让小编带大家一起了解吧。
24位数据转为32位数据,其实就是负数多余位补1,大家可能会很惊讶24位数据怎么会转为32位数据呢?但事实就是这样,小编也感到非常惊讶。
这就是关于24位数据转为32位数据的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!
程序如下:首先判断这个数是不是负数,如果是负数,则把多余位补1即可。
magic~:
int S24toS32(int input)
{
if((input&0x800000)==0x800000) //如果最高位为1,则是负数
{
input |= 0xff000000; //高位补1
}
return input;
}
我们输入几个24位数验证一下:
是不是很简单呢?
用WINDOWS自带的计算器验证一下
Amazing!!!