Comment puis-je convertir un int en deux octets en C#?
Comment puis-je convertir un int en deux octets en C#?
La partie de l'int? Deux octets ne sont pas assez pour coder un entier 32 bits entier valeur.
Qui le bip downvoted. C'est utile et intéressant de savoir que le C de manière soudain ne fonctionne pas pour aucune bonne raison en C# et l'évidente Api n'existent pas (BitConverter est lente et cassé de nombreuses façons).
le c façons de travailler si vous passez à "dangereux" c#
Il peut, ou ne peut pas, être utile et intéressant, mais il est aussi mal spécifiées. La question suggère une
int
nécessite 4 octets pour le stockage. Voulez-vous perdre de l'information dans les entreprises de transfert de fonds?Qui le bip downvoted. C'est utile et intéressant de savoir que le C de manière soudain ne fonctionne pas pour aucune bonne raison en C# et l'évidente Api n'existent pas (BitConverter est lente et cassé de nombreuses façons).
le c façons de travailler si vous passez à "dangereux" c#
Il peut, ou ne peut pas, être utile et intéressant, mais il est aussi mal spécifiées. La question suggère une
int
/Int32
, dans lequel cas, l'OP la plus-sig paire? les moins-sig paire? un peu de chaque? une sorte de ésotériques xor-ing? Je n'ai pas downvote, encore...OriginalL'auteur xarzu | 2010-10-12
Vous devez vous connecter pour publier un commentaire.
En supposant que vous voulez juste le bas octets:
Cependant, depuis " int " est "Int32" qui laisse plus de 2 octets uncaptured.
J'ai fait une rapide bench-mark (Communiqué de construire, 50000000 itérations, un Chronomètre et un test complet répétée deux fois pour éliminer les divers artefacts) et la différence entre la création d'un tableau et à l'aide du bit de masquage vs appelant BitConverter est d'environ 1ns par appel sur ma machine. Si vous retirez la création de la matrice (juste obtenir les deux octets), la différence est d'environ 14ns.
Je ne doute pas de tes repères. BitConverter est lente en comparaison parce qu'il a allouer des tableaux. Si je peux pré-détecter mon tableau de taille pour des milliers d'entiers que je peux économiser une importante quantité de temps.
non-trivial est, bien sûr, par rapport. À un 14ns différence, vous aurez à exécuter 1 million d'itérations pour observer un 14ms retard de l'allocation de tableau. Allocation de mémoire pour les petits objets temporaires par le CLR est en fait assez bon marché. C'est une conséquence de le garbage collector de conception, qui compacte le tas au cours de la collecte, permettant d'allocation sans nécessiter de manipulation de la fragmentation.
il n'est pas Mono qui est de la question - c'est différent-boutisme. L'approche de décalage de côté-les étapes de cette complètement (je suppose que le Mono commentaire visait à BitConverter, pas de maj?)
OriginalL'auteur Marc Gravell
Vous pouvez utiliser BitConverter.GetBytes pour obtenir les octets comprenant un Int32. Il y aura 4 octets dans le résultat, cependant, pas 2.
OriginalL'auteur Reed Copsey
Une autre façon de faire, bien que pas aussi lisse que les autres méthodes:
OriginalL'auteur Larsenal
Est-il un int16?
Cela n'aura plus que deux octets.
OriginalL'auteur Abe Miessler
Option 1:
Option 2:
Je préfère l'option 1!
OriginalL'auteur Amir Twito