2009-06-16 5 views

Répondre

1

Je suppose que la difficulté est dans la conversion entre Big Endian et Little Endian.

Cet article devrait vous aider avec les conversions Endian. Il contient du code pour permuter l'ordre des octets sur les entiers, les entiers longs, les nombres à virgule flottante et les tableaux d'octets de longueur arbitraire.
http://www.codeproject.com/KB/cpp/endianness.aspx

Le code d'échanger un type arbitraire ressemble à ceci:

#include <algorithm> //required for std::swap 

#define ByteSwap5(x) ByteSwap((unsigned char *) &x,sizeof(x)) 

void ByteSwap(unsigned char * b, int n) 
{ 
    register int i = 0; 
    register int j = n-1; 
    while (i<j) 
    { 
     std::swap(b[i], b[j]); 
     i++, j--; 
    } 
} 
0

Vous voulez utiliser htonl et similaire. Le reste du design est le vôtre.

+0

Remarque: htonl() serait utilisé pour un entier de 32 bits, htons() serait utilisé pour un entier de 16 bits et un entier de 8 bits (btye simple) n'aurait pas besoin d'être remplacé par octet, évidemment. – mpontillo

+0

... et je dois ajouter que cette solution ne fonctionnera pas pour un Java "long" (typiquement "long long" en C) - vous auriez besoin d'utiliser la fonction ByteSwap générique de Robert. – mpontillo