30

我有以下数据

uint8_t d1=0x01; 
uint8_t d2=0x02; 

我想将它们组合uint16_t

uint16_t wd = 0x0201;

我该怎么做?

4

4 回答 4

48

您可以使用按位运算符:

uint16_t wd = ((uint16_t)d2 << 8) | d1;

因为:

 (0x0002 << 8) | 0x01 = 0x0200 | 0x0001 = 0x0201
于 2013-03-06T14:23:12.777 回答
16

最简单的方法是:

256U*d2+d1
于 2013-03-06T14:31:03.267 回答
9

这很简单。你不需要演员表,你不需要临时变量,你不需要黑魔法。

uint8_t d1=0x01; 
uint8_t d2=0x02; 
uint16_t wd = (d2 << 8) | d1;

这始终是明确定义的行为,因为 d2 始终是正值并且永远不会溢出,只要d2 <= INT8_MAX.

(INT8_MAX 在 stdint.h 中找到)。

于 2013-03-06T14:39:43.333 回答
1
(uint16_t)((d2 << 8) + (d1 & 0x00ff))
于 2019-12-01T07:28:56.233 回答