Existe-t-il un moyen efficace de le faire?Comment transférer UINT64 à 2 DWORDS?
Répondre
C'est quelque chose que vous pourriez utiliser une union pour:
union {
UINT64 ui64;
struct {
DWORD d0;
DWORD d1;
} y;
} un;
un.ui64 = 27;
// Use un.y.d0 and un.y.d1
Un exemple (sous Linix donc en utilisant différents types):
#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;
}
Ce produit:
27 0
Conserver en gardant à l'esprit que les entiers 64 bits ont des restrictions d'alignement au moins aussi grandes que les entiers 32 bits sur toutes les plates-formes. Par conséquent, il est parfaitement sûr de lancer un pointeur vers un entier 64 bits en tant que pointeur sur un 32 bits.
ULONGLONG largeInt;
printf("%u %u\n", ((DWORD *)&largeInt)[ 0 ], ((DWORD *)&largeInt)[ 1 ]);
De toute évidence, la solution de Pax est beaucoup plus propre, mais cela est techniquement plus efficace car il ne nécessite pas de copie de données.
Je pensais fournir un exemple en utilisant LARGE_INTEGER pour la plate-forme Windows. Si j'ai une variable appelée « valeur » qui est 64 bits, puis-je faire:
LARGE_INTEGER li;
li.QuadPart = value;
DWORD low = li.LowPart;
DWORD high = li.HighPart;
Oui, cette copie, mais j'aime la lisibilité de celui-ci.
- 1. uint64 UTC heure
- 2. Comment transférer l'ASP: tableaux d'adhésion à DotNetNuke?
- 3. Comment gérez-vous des nombres plus grands que UInt64 (C#)
- 4. Comment transférer une classe interne?
- 5. Comment transférer une variable d'une structure à une méthode?
- 6. Comment transférer un paquet ssis de Dev à Prod?
- 7. Procmail Transférer le script pour transférer les emails d'un domaine à l'autre
- 8. Comment faire pour transférer vers j_security_check?
- 9. Transférer des arguments variables
- 10. Comment transférer des données binaires avec Python?
- 11. Comment transférer une propriété en C++/CLI?
- 12. Un moyen de transférer la valeur d'une cellule à l'autre?
- 13. comment égale à 2 variable date C#
- 14. Struts 2: retour à la page d'appel
- 15. Transférer ou sérialiser l'assemblage
- 16. Transférer un événement KeyPress
- 17. Comment transférer des valeurs entre classes sur iPhone?
- 18. Introduction à Occam 2
- 19. rails façon de transférer l'objet polymorphe à travers l'URL
- 20. Comment transférer des données d'une base de données à une autre à l'aide d'un DataSet?
- 21. Ftp transférer le rsync-way
- 22. Transférer une catégorie dans MediaWiki
- 23. Transférer des événements en C#
- 24. Comment remplacer 2 fichiers?
- 25. Comment créer un fichier de taille supérieure à 2 Go sous Linux/Unix?
- 26. Comment transférer des données sensibles entre les processus dans Windows?
- 27. Comment transférer l'interface Web vers l'application de bureau?
- 28. Comment transférer des macros entre des appels nmake?
- 29. Comment transférer un répertoire avec plusieurs sous-répertoires sur ftp?
- 30. Groovy - Comment transférer des nœuds XML entre des documents?
Ou tout simplement utiliser l'Union ULARGE_INTEGER intégré, voir http://msdn.microsoft.com/en-us/library/aa383742(VS.85).aspx – eran
Oui, je sais que la question a déclaré Win32, mais je préfère toujours mon code pour être portable (ne dépendant pas de la plate-forme). – paxdiablo
Pax, votre code n'est pas portable non plus - attention, la largeur de int et long diffère entre les plates-formes et peut même être égale. –