valchimiiste
Je me permet donc de UP ce post et d'y apporter des précisions pour etre plus précis.
Voila le début du paquet
![img]()
Voila le début du JSON concernant le protocolID 4631.

J'ai donc un startMapId écrit sur un double ( donc 8 bytes qu'on soit en 32 ou 64 ) et j'obtiens ce nombre : 4191800404000000 en hexa et donc : 4724698238823694000 en décimale.
Le fait est que le réel mapId de cette map est 73400577.
Ma question se résume donc a savoir comment je passe de 4191800404000000 a 73400577 ?
EDIT : Vu que ça fait 5 jours que je suis la dessus j'ai enfin fini par comprendre ou était le problème et je partage donc la solution pour ceux qui traverseraient ce problème.
En gros, de ce que je comprends, la conversion ne se fait pas de l'hexadecimal vers le décimal, mais de l'hex vers le "double"' pour le mapID. Je présume que pour les autres types ( writeInt par exemple), il faut aussi faire une conversion vers le type auxquels ils correspondent ..? En fait je comprends pas .. Pour moi , int, double , short, c'était simplement des unités de stockage, pas des système de nombre ( binaire, hexa, décimal etc ). J'ai donc du mal a voir comment je passe d'un hexa a un "double"' ( ça ne fait aucun sens pour moi ) mais je dois manquer de connaissances. Bref voila un lien pour convertir de l'hexa vers le double :
https://gregstoll.com/~gregstoll/floattohex/
Pour être clair, l'hexadécimal c'est juste une réprésentation en base 16 d'un nombre binaire.
Pour les entiers :
Un short c'est codé sur 16 bits, soit pour 1 : 0000 0000 0000 0001
Un int c'est codé sur 32 bits, soit pour 1 : 0000 0000 0000 0000 0000 0000 0000 0001
Si par exemple le nombre est un int x = 1; si tu lis en tant que short tu vas lire seulements les 16 premiers bits, c'est à dire 0., et le reste de bits ... soit il sera jamais lu soit tu vas lire comme la variable suivante et tout mélanger.
Ce n'est pas des unités de stockage mais plutôt l'indication du nombre de bits sur lequel ton nombre est codé.
Pour les nombres décimaux (flottant) :
Un float c'est codé sur 32 bits, un double sur 64 bits (mais l'idée est la même c'est la précision qui change).
Le 1er bit représentera le signe (positif ou négatif)
Les 8 bits suivant l'exposant
Les 23 bits suivant la mantisse
Pour coder un float tu commences par l'écrire sous la forme 1, XXX * 2^(n)
n c'est l'exposant et XXX la mantisse
Donc en plus d'indiquer le nombre de bits, short/int/double/... indique aussi quel bits correspondent à quoi.