Little Endian vs Big EndianLittle Endian - Big Endian problème
Big Endian = 0x31014950
Little Endian = 0x50490131
Cependant, l'utilisation de cette méthode
inline unsigned int endian_swap(unsigned int& x)
{
return (((x & 0x000000FF) << 24) |
((x & 0x0000FF00) << 8 ) |
((x & 0x00FF0000) >> 8 ) |
((x & 0xFF000000) >> 24));
}
résultat = 0x54110131
i passé beaucoup de temps à essayer beaucoup de méthodes similaires et même une bibliothèque comme
unsigned long _byteswap_ulong(unsigned long value);
mais toujours pas de chance .. tous les retours même résultat
EDIT
Je travaille sur Little-Endian système avec Microsoft Visual Studio 2008
l'exemple de la manière suivante
int main()
{
unsigned int y = 0x31014950;
unsigned int r = endian_swap(y);
std::cout << r;
}
l'exemple posté sur Ideone.com est correct .. mais ça ne marche pas avec moi
EDIT
std::cout << std::hex << r;
Soit façons Pals .. Hex ou non ce n'est pas obtenir le bon numéro .. Soit Visual Studio a obtenu un grave erreur dans son Debugger ou toute ma machine ..
Parce que je remplacé le Code entier avec un code Redunant Plus lent mais toujours obtenir des résultats même
BTW si cela fait une différence .. J'utilise Debugger Break après la fonction pour vérifier le résultat
Vous utilisez la valeur de retour, non? Tandis que vous prenez 'x' par référence, vous ne le modifiez jamais. –
'endian_swap' semble bien. Et si le remplacer par une fonction de bibliothèque "renvoie le même résultat", peut-être votre problème est quelque part en dehors de cette fonction. – aschepler
@James m'a fait penser que vous n'agissez même pas sur la valeur de 'x', vous faites tous les échanges sur la référence. Est-ce ce que vous voulez vraiment? – BeemerGuy