gpt4 book ai didi

将两个 8 位 uint 转换为 1 个 12 位 uint

转载 作者:行者123 更新时间:2023-11-30 14:24:59 31 4
gpt4 key购买 nike

我正在从微 Controller 读取两个寄存器。一个具有 4 位 MSB(前 4 位有一些其他内容),另一个具有 8 位 LSB。我想将其转换为一个 12 位 uint(准确地说是 16 位)。到目前为止我是这样的:

UINT16 x;
UINT8 RegValue = 0;
UINT8 RegValue1 = 0;

ReadRegister(Register01, &RegValue1);
ReadRegister(Register02, &RegValue2);

x = RegValue1 & 0x000F;
x = x << 8;
x = x | RegValue2 & 0x00FF;

有更好的方法吗?

/* 更准确地说,ReadRegister 是与另一个 ADC 的 I2C 通信。 Register01和Register02是不同的地址。 RegValue1 是 8 位,但只需要 4 LSB 并连接到 RegValue(RegValue1 的 4-LSB 和 RegValue 的所有 8 位)。 */

最佳答案

如果您知道机器的字节顺序,则可以读取字节直接进入x,如下所示:

ReadRegister(Register01, (UINT8*)&x + 1);
ReadRegister(Register02, (UINT8*)&x);
x &= 0xfff;

请注意,这是不可移植的,并且性能增益(如果有)将可能很小。

关于将两个 8 位 uint 转换为 1 个 12 位 uint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10878612/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com