C/C++ Little Endian C++

Gohu

Membre Actif
Inscrit
16 Novembre 2013
Messages
222
Reactions
2
#1
Bonjour,

J'ai actuellement un petit problème: je reçois le packet de ID 3, tout
va bien, sauf que si j'ai bien compris pour le lire puis deserialiser faut que je le passe
en little-endian --> sauf que je galère. J'ai essayé plusieurs méthodes, en vain. Si quelqu'un
a une petite idée.

PS: J'utilise la bibliothèque de Qt

Merci d'avance!
 
Inscrit
17 Janvier 2013
Messages
2
Reactions
0
#2
big endian c'est les bit à l'envers et little c'est à l’endroit
 

Gohu

Membre Actif
Inscrit
16 Novembre 2013
Messages
222
Reactions
2
#3
Merci bien je pense que j'avais compris :)
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#4
il faut pas passer en big endian non ? look le bigEndianReader de bouh2 (dans bim) c'est du c# mais bon
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#5
faut juste les lire dans le sens qu'ils sont , pas besoin de big endian ou de little endian , sont deja dans l'ordre (en big)
nefitana a dit:
big endian c'est les bit à l'envers et little c'est à l’endroit
non c'est l'inverse big c'est a l'endroit (le poid fort a gauche) et little a l'envers (le poid faible a gauche) :
12 en big c'est 0b1100 en little c'est 0b0011 (en binaire)
2013 en big c'est 0x07DD en little c'est 0xDD07 (en hexa)
 

Gohu

Membre Actif
Inscrit
16 Novembre 2013
Messages
222
Reactions
2
#6
Ok très bien merci. Enfait j'ai du mal m'exprimer:
je cherche un moyen de faire un reader/writer en C++. En C# ca a l'aire
assez facile mais la je rame un peu.

Merci d'avance!
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#7
on va dire que tu as : A0 B1 C2 D3 (en hexa) et en s'aidant de ce tableau http://msdn.microsoft.com/en-us/library ... ceaw7.aspx
pour lire un byte pas dur tu prends le char , A0 (dans le tableau c'est 1 byte)
pour lire un ushort : dans le tableau c'est 2 bytes , donc A0 et B1 , tu multiplis A0 par 256 et tu ajoutes B1 au resultat
pour lire un uint : dans le tableau c'est 4 bytes , donc A0 , B1 , C2 et D3 , tu multiplis A0 par 256*256*256 , tu ajoutes B1*256*256 , tu ajoutes C2*256 et tu ajoutes D3
pour un ulong c'est pareil mais avec 8 bytes (le 8ieme byte pas multiplié que tu ajoutes au 7ieme * 256 + 6ieme * 256 *256 + 5ieme * 256 * 256 * 256 + 4 ieme * 256 * 256 * 256 * 256 + 3ieme * 256^5 + 2ieme * 256^6 + 1er * 256^7)

pour transformer un ushort en bytes (ecrire) c'est l'inverse , tu as 2013 a transformer : 2013 / 256 = 7 soit 0x07 il reste 221 soit 0xDD => 07 DD
 
Haut Bas