64 bits non signé à 32 bits signés
-
20-09-2019 - |
Question
Je dois convertir des données Java à long type de données (64 bits) dans l'héritage c ++ application unsigned int (32 bits) type de données.
Pas de soucis au sujet de la perte de données que les données sont horodatage Linux, qui prendrait éons frapper limite unsigned int.
Toute idée de ce que la transformation à appliquer à ces chiffres?
Merci d'avance!
P.S. - par exemple des types de données:
Java - 1266336527340
C ++ - 1266336583
Les deux produisent la même date, et environ en même temps (+/- une minute).
La solution
Java de Date.getTime renvoie le nombre de millisecondes de l'époque, alors que le code C ++ prévoit que le nombre de de l'époque, de sorte que vous devez diviser par 1000 secondes puis tronquer:
int timestampAsInt = (int)(timestampAsLong / 1000);
Java ne dispose que d'un entier signé non signé, mais cela devrait fonctionner.
Autres conseils
long javaTime = someDate.getTime();
int cTime = (int)((javaTime + 500) / 1000);
Je préfère arrondir troncature, mais vous devrez décider qui est bon pour vos règles métier.