C # obtient et définit le mot d'ordre supérieur d'un nombre entier
Ce qui est efficace ou syntaxiquement moyen simple d'obtenir et de définir l'ordre le cadre d'un entier?
source d'informationauteur James Cadd
Vous devez vous connecter pour publier un commentaire.
C'est la même qu'en C/C++:
EDIT: Parce que je suis de bonne humeur, ici vous allez. Rappelez-vous juste, immuable types sont immuables! L'ensemble des fonctions doivent être attribuée à quelque chose.
EDIT 2: en seconde opinion, si vous avez vraiment besoin de faire cela et ne veulent pas la syntaxe partout, l'utilisation de Michael solution. +1 pour lui pour me montrer quelque chose de nouveau.
ensemble:
obtenir:
[MODIFIER]
C# est un excellent support pour les variables partageant le même emplacement de mémoire, et des morceaux de structuration
source: http://msdn.microsoft.com/en-us/library/acxa5b99(SV.80).aspx
REMARQUE: depuis C# ne pas avoir macro fonction, l'approche ci-dessus est plus performant que le passage de la variable pour les moyens/méthodes d'extension
Je suppose que vous ne voulez pas les calculs lorsque vous voulez Hiword /Hibyte ou le LoWord /Lobyte,
si un Système.Int32 commence à l'adresse 100 (il occupe l'adresse de 100 à 103), que vous voulez comme un LoWord les deux octets commençant à l'adresse 100 et 101 et Hiword est l'adresse 102 et 103.
Ceci peut être réalisé à l'aide de la classe BitConverter. Cette classe n'est pas faire n'importe quoi avec les bits, il n'utilise que les adresses de retour la valeur demandée.
Que la taille des types comme int /long sont différents par la plate-forme, et WORD et DWORD sont un peu confus, j'utilise le Système de types du Système.Int16/Int32/Int64. Jamais personne n'aura aucun problème de deviner le nombre de bits dans un Système.Int32.
Avec BitConverter vous pouvez convertir n'importe quel nombre entier le tableau d'octets en commençant sur l'endroit et convertir un tableau d'octets de longueur appropriée à l'entier correspondant. Aucun calcul n'est nécessaire et aucun bit va changer,
Supposons que vous disposez d'un Système.Int32 X (qui est une valeur DWORD dans le vieux)
La bonne chose est que cela fonctionne avec toutes les longueurs, vous n'avez pas à combiner des fonctions comme LOBYTE et HIORD pour obtenir le troisième octet:
Une Autre Alternative
J'utilise ces 2 fonction...