C# Protocol D2 endianness

A

Anonymous

Invité
#1
Bonjour,

Sur le protocole j'ai pas compris ce qu' il faut faire quand bouh2 parle endianness dans le forum viewtopic.php?f=41&t=218 . par exemple en doit passer tout le paquet en Bigendian ou c'est juste quelque byte a passer en bigendian. si quelq'un à un exemple avec un paquet...
merci
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#2
Salut ,
(un entier c'est 4 bytes)
il veut dire que d0fus envoit un entier comme ca 01 02 A0 F0 pour donner 16949488 (le byte le plus fort est a gauche)
0x01 * 256 * 256 * 256 = 16777216 +
0x02 * 256 * 256 = 131072 +
0xA0 * 256 = 40960 +
0xF0= 240 +
=16949488

la fonction pour envoyer un entier en .net fait l'inverse 16949488 -> F0 A0 02 01 (le byte le plus fort est a droite)

(ou c'est l'inverse d0fus envoit le plus fort a droite et .net a gauche , je sais plus)

ce qui veut dire que tu ne peux pas utiliser les fonctions officielles de .net pour envoyer un entier mais tu devras faire ta propre fonction (et pareil pour les uint , short , ushort et tout... ouffff pour les bytes c'est bon mdr , normal un byte c'est un seul 0xYY)

et pour la reception biensur c'est le meme combat
 
A

Anonymous

Invité
#3
Ok merci bien! enfaite pour moi le faite d’écrire de gauche à droite c'est normal!
=> byte[] Montab = new byte[4] = {0x01,0x02,0xA0,0xF0}; => bigendian

alors que écrire un int32 comme ca:
=> byte[] Montab = new byte[4] = {0xF0,0xA0,0x02,0x01}; => littleendian
C'est pas normal xD^^
 
A

Anonymous

Invité
#4
un bit c'est un 0 ou 1.
un byte c'est un octet = 8 bits qui peut être converti en hexadécimal allant de 0x00 à 0xFF
un short c'est 2 bytes
un int c'est 4 bytes
un long c'est 8 bytes

Il faut savoir que ces termes sont pour les valeurs signés (positif ou négatif) et donc la même chose existe pour les non singé, c'est à dire strictement positif en ajoutant le prefix "u" sauf pour le byte.
uint, ushort etc.
 
Haut Bas