64-bit senza segno a 32 bit con segno
-
20-09-2019 - |
Domanda
Ho bisogno di convertire i dati Java lunga tipo di dati (64-bit) in eredità c ++ applicazione unsigned int (32 bit) tipo di dati.
Non ci sono preoccupazioni circa la perdita di dati, come i dati è timestamp Linux, che avrebbe preso eoni di colpire limite unsigned int.
Qualche idea di cosa trasformazione da applicare a questi numeri?
Grazie in anticipo!
P.S. - tipi di dati esempio:
Java - 1266336527340
C ++ - 1.266.336,583 mila
Entrambi producono stessa data, e circa lo stesso tempo (+/- un minuto).
Soluzione
Date.getTime restituisce il numero di millisecondi di epoca, mentre il codice C ++ prevede che il numero di secondi di epoca, quindi è necessario dividere per 1000 poi troncare:
int timestampAsInt = (int)(timestampAsLong / 1000);
Java ha solo un intero con segno non senza segno, ma questo dovrebbe funzionare.
Altri suggerimenti
long javaTime = someDate.getTime();
int cTime = (int)((javaTime + 500) / 1000);
Io preferisco l'arrotondamento sopra troncamento, ma si dovrà decidere che è giusto per le vostre regole di business.