Apparemment *(cra+3)
est un char
de valeur '\xdd'
. Puisqu'un char
est signé, cela signifie en fait -35 (0xdd
dans le complément 2), c'est-à-dire 0x ... fffffdd. La restriction ce à 16 bits donne 0xffdd, à savoir 65501.
Vous devez faire un unsigned char
il donne un certain nombre dans la gamme 0-255:
num = (unsigned char)cra[3];
Note:
1. la signature de char
est définie par l'implémentation, mais généralement (par exemple dans le cas d'OP) elle est signée.
2. les plages de signed char
, unsigned char
et unsigned short
sont définies par l'implémentation, mais là encore, elles sont généralement de -128-127, 0-255 et 0-65535 respectivement.
3. la conversion de signed char
à unsigned char
est en fait -35 + 65536 = 65501.
pour que votre code soit valide cra doit être un pointeur. Pouvez-vous nous montrer sa déclaration? –
Quel est le contenu de cra? – Ruel