请问合并两个8位数据的方式是否正确?

2019-07-14 14:18发布

在调四轴飞控的时候看到了这行代码:
uint8_t buf[6];
accData[0] = (int16_t)((buf[0] << 8) | buf[1]);//合并8位数据为16位

其中accData[0]是16位的,buf[0]、buf[1]是8位的。

如果先让8位的buf[0]先左移8位,会不会导致buf[0]的数据丢失?8位数组左移8位之后,数组原来的数据跑哪里去了?

我感觉合并数据应该这么合并:
1.将buf[0]的值赋给accData[0]的低8位;
2.accData[0]<<8;
3.将buf[0]的值赋给accData[0]的低8位;

在网上看了别人的C语言合并8位数据为16位数据的代码,大概就是上面那么写的。

所以说那种写法到底有没有错?左移之后的数据会不会丢失?

求大神解答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
滔滔不绝的滔滔
1楼-- · 2019-07-16 08:09
看汇编代码吧,移位的数据并没有保存在原来的数组,保存在RO R1寄存器上,所以并没有任何问题。
ji56789
2楼-- · 2019-07-16 12:55
看看,帮顶
chm1
3楼-- · 2019-07-16 18:20
 精彩回答 2  元偷偷看……
chm1
4楼-- · 2019-07-16 21:05
youpukeji668 发表于 2019-1-30 12:37
stm32的寄存器是32位的

8为数据左移之后时候否丢失是跟运行这行代码的机器有关的吧?
比如在51单片机中,8位数据左移8位之后就丢了?
youpukeji668
5楼-- · 2019-07-17 00:09
chm1 发表于 2019-1-30 14:06
8为数据左移之后时候否丢失是跟运行这行代码的机器有关的吧?
比如在51单片机中,8位数据左移8位之后就丢了?

51是8位单片机
chm1
6楼-- · 2019-07-17 03:04
youpukeji668 发表于 2019-1-30 14:12
51是8位单片机

明白了,在32上运行这个代码是没问题的,但这行代码对数据来说是不安全的,移植到其他单片机上有可能不能用。

一周热门 更多>