Gibt es einen effizienten Weg, dies zu tun?Wie UINT64 zu 2 DWORDS übertragen?
1
A
Antwort
4
Das ist etwas, was Sie für eine Vereinigung verwenden könnte:
union {
UINT64 ui64;
struct {
DWORD d0;
DWORD d1;
} y;
} un;
un.ui64 = 27;
// Use un.y.d0 and un.y.d1
Ein Beispiel (unter Linix so unterschiedliche Typen verwenden):
#include <stdio.h>
union {
long ui64;
struct {
int d0;
int d1;
} y;
} un;
int main (void) {
un.ui64 = 27;
printf ("%d %d\n", un.y.d0, un.y.d1);
return 0;
}
Dies erzeugt:
27 0
0
Halten Beachten Sie, dass 64-Bit-Ganzzahlen Ausrichtung Einschränkungen mindestens so groß wie 32-Bit-Ganzzahlen auf allen Plattformen haben. Daher ist es absolut sicher, einen Zeiger auf eine 64-Bit-Ganzzahl als Zeiger auf ein 32-Bit zu setzen.
ULONGLONG largeInt;
printf("%u %u\n", ((DWORD *)&largeInt)[ 0 ], ((DWORD *)&largeInt)[ 1 ]);
Offensichtlich ist Pax-Lösung viel saubere, aber dies ist technisch effizienter, da es kein Datenkopieren erfordert.
1
Ich dachte, ich würde ein Beispiel mit LARGE_INTEGER für die Windows-Plattform bereitstellen. Wenn ich eine Variable mit dem Namen „Wert“ habe, die 64-Bit ist, dann mache ich:
LARGE_INTEGER li;
li.QuadPart = value;
DWORD low = li.LowPart;
DWORD high = li.HighPart;
Ja, das kopiert, aber Ich mag die Lesbarkeit davon.
Verwandte Themen
- 1. NSString zu UInt64
- 2. Reinterpreting UInt64 als Struktur
- 3. Möglich, Sitzung zwischen 2 Apache-PHP-Instanzen zu übertragen
- 4. Angular 2 untergeordnete Komponentenereignisse an Eltern übertragen
- 5. WatchOS 2 - Bildsequenzen für Animation übertragen
- 6. Wie kann ich Daten zwischen 2 MySQL-Datenbanken übertragen?
- 7. C, wie sqlite3 Datenbank-Handle zu übertragen
- 8. Wert zu TAB übertragen Aktivität
- 9. wie Jax-rs Rest Service mit Cordova Plugin zu übertragen, um Daten zu übertragen
- 10. Absturz auf UInt64 bitweisem Betrieb in Swift
- 11. Der Unterschied zwischen unsigned long und UINT64
- 12. Wie gehen Sie mit Zahlen größer als UInt64 (C#)
- 13. Perl übertragen Skalar zu Subroutine durch Parameterübergabe
- 14. MPI_Reduce keine Ergebnisse zu Root-Prozess übertragen
- 15. Python numpy uint64 wird konvertiert, um auf Division
- 16. Wie werden virtuelle Dateien übertragen?
- 17. Um Daten in URL zu übertragen
- 18. Beste Möglichkeit, Dateien von Xyboard zu Ubuntu zu übertragen
- 19. zu Textur für Mini-Karte übertragen, DirextX
- 20. Wie übertragen Sie Formularwerte von einer asp.net-Seite zu anderen?
- 21. Wie konfiguriere ich Mercurial, um bestimmte Konfigurationsdateien nicht zu übertragen?
- 22. Wie Daten für ISO 8583 zu übertragen Socket c codieren #
- 23. Wie übertragen Sie Dateien per FTP von Remote zu Remote?
- 24. Wie übertragen Sie Dateien von Windows zu Linux mit ssh?
- 25. Wie übertragen Bilder von Android-Gerät zu Matlab und umgekehrt
- 26. Wie wird LINQ zu SQL in einem separaten Projekt übertragen?
- 27. Wie benutze ich lftp um segmentierte Dateien zu übertragen?
- 28. Wie übertragen Sie Bilddaten von node.js zu HTML5 Canvas?
- 29. Wie übertragen Params zu GET-Methode in Express?
- 30. Übertragen Sie Excel-Daten zu Access
Oder verwenden Sie einfach die integrierte ULARGE_INTEGER Union, siehe http://msdn.microsoft.com/en-us/library/aa383742(VS.85).aspx – eran
Ja, ich kenne die Frage Win32, aber ich bevorzuge immer noch meinen Code, um beweglich zu sein (nicht abhängig von der Plattform). – paxdiablo
Pax, Ihr Code ist auch nicht portabel - wohlgemerkt, die Breite von int und long unterscheidet sich zwischen Plattformen und kann sogar gleich sein. –