C# get-und set-das high-word der ein integer
Was ist eine effiziente oder syntaktisch einfache Möglichkeit zum abrufen und festlegen der hohe Auftragsbestand Teil ein integer?
Die Größe von einem normalen integer ist in der Regel das Wort Größe einer Maschine. Meinst du die high-order-bytes oder vielleicht die high-order word von lange?
InformationsquelleAutor James Cadd | 2009-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es das gleiche wie in C/C++:
EDIT:, Denn ich bin in guter Stimmung, hier gehen Sie. Denken Sie nur daran, unveränderliche Arten sind unveränderlich! Die " set " - Funktionen zugewiesen sein müssen, etwas.
EDIT 2: Auf den zweiten Gedanken, wenn Sie wirklich brauchen, dies zu tun, und nicht wollen, dass die syntax überall verwenden Michaels Lösung. +1 zu ihm für zeigt mir etwas neues.
Wenn Sie diese eine Menge, und wenn Sie nostalgische C-Tagen können Sie erstellen statische Methoden für diese, genannt LoWord(), HiWord(), LoByte() und HiByte(). Ich bin überrascht, dass diese ol' Makros äquivalent wurden nicht gemacht, irgendwie Teil von etwas .NET-Klasse wie Int.
Dies nutzt die Rechenleistung, das ist eine Verschwendung. Zur compile-Zeit die gewünschte bit-Muster ist schon irgendwo auf den stack und wir können sagen dem compiler, wo genau diese bit-Muster ist, so dass es kopiert werden kann, ohne irgendwelche Berechnungen. Verwenden Sie System.BitConverter.
InformationsquelleAutor Matthew Scharley
set:
bekommen:
[BEARBEITEN]
C# bietet eine hervorragende Unterstützung für Variablen teilen die gleiche Speicheradresse, bits und Strukturierung
Quelle: http://msdn.microsoft.com/en-us/library/acxa5b99(VS.80).aspx
HINWEIS: da C# nicht makro Funktion, die obige Vorgehensweise ist performant, als durch die variable Methoden/Erweiterung Methoden
Dieses ist extrem nützlich und clever! Es ist viel mehr einfach zu bedienen und funktioniert problemlos, sowohl für die Anreise und für die Einstellung der low-und high-order-Werte. Vielen Dank für das teilen dieses wissen!
InformationsquelleAutor Michael Buen
Ich denke, Sie wollen keine Berechnungen, wenn Sie wollen, Hiword /Hibyte oder die LoWord /Lobyte,
wenn ein System.Int32 startet bei Adresse 100 (so dass es sich in Adresse 100 bis 103), die Sie wollen, wie eine LoWord der zwei bytes beginnend mit der Adresse 100 und 101 und Hiword ist die Adresse 102 und 103.
Dies kann erreicht werden durch die Klasse BitConverter. Diese Klasse tut nichts mit den bits, es nutzt nur die Adressen zur Rücksendung der angeforderten Wert.
Als die Größe von Typen wie int /long sind unterschiedlich je nach Plattform und WORD und DWORD sind ein bisschen verwirrend, ich benutze den System-Typen System.Int16/Int32/Int64. Niemand wird jemals irgendwelche Probleme haben, zu erraten, die Anzahl der bits, die in einem System.Int32.
Mit BitConverter können Sie konvertieren eine ganze Zahl in das array von bytes ab, die Lage und wandeln Sie ein array von bytes von der richtigen Länge für die entsprechenden integer. Keine Berechnungen notwendig und kein bit ändern,
Angenommen, Sie haben ein System.Int32 X (das ist ein DWORD-in alten Begriffen)
Das schöne ist, dass dies funktioniert mit allen Längen, die Sie nicht haben, um die Funktionen kombinieren, wie LOBYTE und HIORD die Dritte byte:
InformationsquelleAutor Harald Coppoolse
Andere Alternative
InformationsquelleAutor jv_
Ich diese 2 Funktion...
InformationsquelleAutor user3494684