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 に答える