Combiner deux uint8_t et uint16_t

J’ai les données suivantes

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

Je veux les combiner aussi uint16_t que

 uint16_t wd = 0x0201; 

Comment puis-je le faire?

Vous pouvez utiliser des opérateurs au niveau des bits:

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

Parce que:

  (0x0002 << 8) | 0x01 = 0x0200 | 0x0001 = 0x0201 

Le moyen le plus simple est:

 256U*d2+d1 

C’est assez simple. Vous n’avez besoin d’aucun casting, vous n’avez besoin d’aucune variable temporaire, vous n’avez besoin d’aucune magie noire.

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

Ce comportement est toujours bien défini car d2 est toujours une valeur positive et ne déborde jamais, tant que d2 <= INT8_MAX .

(INT8_MAX se trouve dans stdint.h).