32位二进制到24位有符号转换

OM222O

我在Arduino上使用24位I2C ADC,没有3字节(24位)数据类型,所以我改用uint32_t32位无符号整数。但是,我的实际输出是一个24位带符号的数字,如下所示:

如果您对此感兴趣,这也是我用来读取结果的代码:

uint32_t readData(){
  Wire.beginTransmission(address);
  Wire.write(0x10);
  Wire.endTransmission();
  Wire.requestFrom(address,3);
  byte dataMSB = Wire.read();
  byte data = Wire.read();
  byte dataLSB = Wire.read();
  uint32_t data32 = dataMSB;
  data32 <<= 8;
  data32 |= data;
  data32 <<= 8;
  data32 |= dataLSB;
  return data32;
}

为了使该数字有用,我需要将其转换回一个24位带符号整数(我不确定该怎么做,或者是否有可能平安夜,因为24不是2的幂),所以我是有点卡住。如果有人快要完成我的项目,那将是很棒的选择,这是最后几步之一。

维卡茨库

Use int32_t instead of unit32_t for data32. Then before returning the value, shift it left by 8, then right by 8 to sign extend it.

So this code:

uint32_t readData(){
  Wire.beginTransmission(address);
  Wire.write(0x10);
  Wire.endTransmission();
  Wire.requestFrom(address,3);
  byte dataMSB = Wire.read();
  byte data = Wire.read();
  byte dataLSB = Wire.read();
  int32_t data32 = dataMSB;
  data32 <<= 8;
  data32 |= data;
  data32 <<= 8;
  data32 |= dataLSB;
  return (data32 << 8) >> 8;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

5位有符号二进制到int

十进制包括负到 32 位二进制转换器

负整数到有符号32位二进制数

使用位掩码将有符号整数转换为二进制补码

在 Python 中将二进制转换为有符号的小端 16 位整数

在Java中将24位二进制补码转换为带符号的十进制数

将原始的14位二进制补码转换为带符号的16位整数

如何将带符号的十进制转换为十六进制的24位二进制补码带符号数

如何将 16 位二进制文件转换为 32 位文件?

C ++二进制写入/从32位到64位的读/写

3位short到6位int的二进制转换

将 char 转换为二进制位,即: 'a' 到二进制等价物

在Python中将32位二进制数字转换为十进制

在python中将32位二进制转换为十进制

将24位二进制补码转换为int?

从十六进制到二进制的转换,在Java中保持8位

在Python中将二进制表示形式转换为带符号的64位整数

将1和0的32位二进制字符串转换为SQL Server中的带符号十进制数

使用Integer.parseInt转换32位二进制字符串失败

如何找到32位二进制文件?

32位整数的二进制表示

从二进制转换为64位浮点

转换为二进制截断位

将整数转换为4位二进制

在64位系统上具有32位二进制文件的ldd-运行但不会报告

在具有32位二进制文件的64位计算机上编译AC程序

加速将24位二进制数据加载到16位numpy数组中

Java Integer.parseInt()用于32位带符号二进制字符串会引发NumberFormatException

N位二进制数