un uint64_t à int
Je suis en train d'écrire un java de liaison pour un code en C et je ne suis pas vraiment familier avec C.
J'ai un uint64_t et ont besoin de convertir un int. Personne ne sait comment faire cela?
(Ma liaison renvoie alors un jint...)
Vous devez vous connecter pour publier un commentaire.
Généralement, à l'aide d'une largeur exacte entier comme "un uint64_t' est pour une bonne raison.
Si vous le lancez pour un int, ce qui peut ne pas être en 64bits longtemps, vous risquez d'avoir de sérieux problèmes...
uint64_t
équivalent à unint
partout où il peut être utilisé?int
dépend de la mise en œuvre. Sur les ordinateurs d'aujourd'hui, il est généralement de 32 bits, mais il pourrait n'être rien... Alors, évidemment, la conversion d'unuint64_t
à unint
pourraient résulter d'un entier tronqué...long long
à la place?long long
. En C, le problème est le même. Alors qu'il est pratiquement travailler sur la plupart des implémentations, la taille delong long
est toujours définie par l'implémentation. Donc, ne jamais compter sur cela.La réponse courte:
Techniquement, c'est un comportement indéfini si la valeur de
foo
ne s'inscrivent pas dans uneint
. Dans la pratique, il sera toujours simplement couper les bits de poids. Si vous voulez, pour être plus exact, alors:Si vous écrivez JNI wrappers, le meilleur match pour un uint64_t est long, pas de type int. Même alors, vous allez perdre de la précision, que Java n'a pas non signé types (d'où le u), et vous devez être préparé pour vérifier le signe de la valeur.
Noter que java ne supporte pas les types non signés. Le type le plus proche de java sera longue, car il a aussi 64 bits.
Casting uint64 de long n'est pas perdre les données, parce que le nombre de bits sont les mêmes, mais les grandes valeurs seront affichées sous forme de nombres négatifs alors.
hm...
J'ai de la méthode en C qui retourne un page_ID qui est un uint64_t nombre. Maintenant, j'ai besoin de stocker ce nombre dans une Java HashMap. Alors, quelle est la meilleure façon de stocker un uint64_t en Java table de hachage? Le problème, c'est que quand je fais une opération de recherche, j'ai besoin de prendre que la valeur spécifique dans la table de hachage et de le jeter en arrière pour l'un uint64_t alors que je peux appeler une fonction dans le code C, qui attend un uint64_t comme argument.
P. S. je l'ai fait avec jlong pid = (jlong) pid_in_uint64_t;
so far so good...
jlong
semble correspondre à votre but à l'amende juste.