__x
n'a pas de signification particulière. ENDIAN_LE16
est une macro qui fait un endroit pour changer l'endianness sans changer votre code source. Chaque cible de génération peut avoir une version différente de gfpr.h
spécifique à cette cible.
Vous devez compiler pour une machine little-endian, donc ENDIAN_LE16
ne nécessite aucune modification. Il laisse simplement son argument (__x
) inchangé. Si vous compiliez pour une cible big-endian, ENDIAN_LE16
serait défini pour échanger les octets de son argument. Quelque chose comme:
#define ENDIAN_LE16(__x) ((((x) & 0xff) << 8) | (((x) >> 8) & 0xff))
De cette façon, en changeant le fichier cible gfpr.h
vous inclure, vous obtenez les bons résultats sans avoir à changer votre code source.
Modifier Par la file you're probably looking at, ENDIAN_BE32
invoque ENDIAN_RET32
, qui twiddles bits d'une manière similaire à ce que je l'ai montré ci-dessus.