Ensuite, tu peux également utiliser une tableau "unsigned char tableau [2];" et déposer tes valeurs directement dedans avec tableau[0] et et tableau[1]. Au moins tu es sûr que tes valeurs sont concaténées en mémoire, et dans le bon ordre. Sachant cela, tu n'as plus qu'à les lire comme s'il s'agissait d'un short, en utilisant un transtypage (cast) :
short result = *(short *)tableau;
Arg !
J'avais pas fait gaffe à première lecture, mais quand même... short result = 0;
unsigned char *p = (unsigned char*) &result;
p[0] = 0xaa;
p[1] = 0xaa;
Ce code n'a aucun problème d'alignement (ce qui est correctement aligné pour un truc quelconque qui n'est pas un champ de bits sera toujours correctement aligné pour un unsigned char). Par contre, la valeur de result reste dépendante de CHAR_BITS.
(il y a plantage éventuel suivant sizeof(short) qui peut être égal à 1, mais un if ou une bête boucle peut suffire à gérer correctement tous les cas)
[^] # Re: au hasard ...
Posté par alf . En réponse au message deux char pour faire un short. Évalué à 1.
Arg !
J'avais pas fait gaffe à première lecture, mais quand même...
short result = 0;
unsigned char *p = (unsigned char*) &result;
p[0] = 0xaa;
p[1] = 0xaa;
Ce code n'a aucun problème d'alignement (ce qui est correctement aligné pour un truc quelconque qui n'est pas un champ de bits sera toujours correctement aligné pour un unsigned char). Par contre, la valeur de result reste dépendante de CHAR_BITS.
(il y a plantage éventuel suivant sizeof(short) qui peut être égal à 1, mais un if ou une bête boucle peut suffire à gérer correctement tous les cas)