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).