Convertir un ushort valeur en deux valeurs d'octets en C#
Comment puis-je partager un ushort en deux octets variables en C#?
J'ai essayé le suivant (package.FrameID est ushort):
Quand j'ai essayer de calculer ce papier&crayon-je obtenir le bon résultat. Aussi, si FrameID est supérieure à un octet (donc le deuxième octet n'est pas zéro), il fonctionne.
array[0] = (byte)(0x0000000011111111 & package.FrameID);
array[1] = (byte)(package.FrameID >> 8);
Dans mon cas package.FrameID est de 56 et le résultat dans tableau[0] est de 16 au lieu de 56.
Comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
0x0000000011111111
n'est pas un nombre binaire, c'est un nombre hexadécimal. Vous avez besoin d'utiliser0x0ff
à la place.Cependant, puisque le résultat est un octet et un casting pour un octet jeter les bits de poids de toute façon, vous n'avez pas réellement besoin de
and
le résultat. Il vous suffit de faire ceci:(C'est en supposant que vous n'êtes pas à l'aide de
checked
code. Si vous êtes, alors la conversion d'une valeur supérieure à 255 pour unbyte
provoquera une exception. Vous saurez si vous êtes en utilisantchecked
code.)0x0f
est de 1 octet, si nous effectuons unebit and
opération et laushort
, la valeur de retour est uniquement bas à grignoter de l'octet de poids faible, je pense que c'est0x00ff
.Utilisation BitConverter
0x00ff
0x0000000011111111
, semble pour être un de 8 octets (16 chiffres hexadécimaux), mais depuis le premier 8 chiffres hexadécimaux sont toutes à zéro, il est interprété comme un 4-nombre d'octet. Et depuis le premier non-chiffre zéro (1
) est entre1
et7
, pas entre8
etf
, c'est unint
, pas unuint
. Vous pouvez essayervar a = 0x11223344;
(int
),var b = 0x81223344;
(uint
),var c = 0x112233448899aabb;
(long
),var d = 0x812233448899aabb;
(ulong
).