Inverser les octets de valeur 64 bits

Je suis en train d'inverser les octets pour une version 64 bits de l'adresse de pointeur pour une mission, et ont de ce code:

char swapPtr(char x){
x = (x & 0x00000000FFFFFFFF) << 32 | (x & 0xFFFFFFFF00000000) >> 32;
x = (x & 0x0000FFFF0000FFFF) << 16 | (x & 0xFFFF0000FFFF0000) >> 16;
x = (x & 0x00FF00FF00FF00FF) << 8  | (x & 0xFF00FF00FF00FF00) >> 8;
return x;
}

Mais, c'est juste les dégâts tout en place. Cependant, une fonction similaire fonctionne parfaitement pour un 64 bits de long. Est-il quelque chose de différent qui doit être fait pour les pointeurs?

Pourrait la façon dont je suis en train de faire l'appel de la fonction?

Pour un pointeur:

*(char*)loc = swapPtr(*(char*)loc);

Pour une longue:

*loc = swapLong(*loc);
char n'est pas le bon type de données. C'est (généralement) un 8 bits de l'octet. Si vous êtes sur une plate-forme 64 bits de caractères, veuillez le mentionner.
oui, c'est sur l'architecture x86_64
Ensuite, un char est de 8 bits. Il ne peut pas tenir un 64 bits de la valeur.

OriginalL'auteur nix | 2014-02-02