Sens d'écriture nombres hexadécimaux - C - Programmation
Marsh Posté le 19-03-2012 à 09:13:31
Salut,
Voir article http://fr.wikipedia.org/wiki/Endianness
Citation : Le protocole IP définit un standard, le network byte order (soit ordre des octets du réseau). Dans ce protocole, les informations binaires sont en général codées en paquets, et envoyées sur le réseau, l'octet de poids le plus fort en premier, c'est-à-dire selon le mode big-endian et cela quel que soit l'endianness naturel du processeur hôte. |
Ca devrait répondre à ta question
Marsh Posté le 19-03-2012 à 11:26:18
Essai de faire un ntohl() dessus?
Marsh Posté le 19-03-2012 à 15:59:07
parfait merci
et quand j'écris dans un fichier via un fwrite, est-ce que l'octet de poids fort ou celui de poids faible en premier ?
Marsh Posté le 19-03-2012 à 16:38:56
nisalon_caje a écrit : parfait merci |
tout dépend de ta machine (big endian, little endian)
le mieux est de te faire une petite librairie qui détermine si l'hôte est big ou little endian
ensuite, tu travailles selon le mode dont tu as besoin (certains formats utilisent l'un des deux modes par défaut, d'autres utilisent les deux modes et précisent dans la trame le mode qu'ils utilisent, etc.)
Code :
|
Et après tu utilises une fonction du genre pour manipuler tes données
Code :
|
Marsh Posté le 19-03-2012 à 16:56:57
Y'a pas les byteshifts en C ?
Marsh Posté le 19-03-2012 à 22:55:02
Terminapor a écrit : Y'a pas les byteshifts en C ? |
Si, si, et c'est optimisé tel quel en code compilé depuis plus de 20 ans (voir avec des LEA sur x86 pour d'autres valeurs que les puissances de deux)
Mais j'ai une vieille habitude de ne jamais les utiliser sur des unsigned, à cause d'un bug de compilateur microsoft qui fait le shift en signé (avec réinjection du bit le plus significatif quand on s'en sert pour diviser par une puissance de deux)
Ils ont peut-être corrigé ce bug depuis, mais bon. Dans le doute
Marsh Posté le 19-03-2012 à 02:48:08
Bonjour
Je suis en train d'essayer de comprendre un flux réseau capté par Wireshark.
Ce flux commence par : 0x17 0x03 0x01 0x00 (wireshark me propose de stocker ca dans un tableau c :
)
En supposant que ceci soit un int (corrigez moi si je me trompe, mais selon moi ces 4 char mis bout à bout forment bien un int, non ?), de quel int s'agit-il ?
De 0x17030100 ?
De 0x00010317 ?
D'un autre ?
Merci d'avance
Message édité par nisalon_caje le 19-03-2012 à 02:49:56