64 bits não assinados a 32 bits assinados
-
20-09-2019 - |
Pergunta
Preciso converter dados do Java Long Datatype (64 bits) em um tipo de dados do App C ++ Legacy C ++ não assinado (32 bits).
Não se preocupe com a perda de dados, pois os dados são o Timestamp Linux, o que levaria os Eons para atingir o limite int não assinado.
Alguma idéia de que transformação aplicar a esses números?
Desde já, obrigado!
PS - Exemplo do tipo dados:
Java - 1266336527340
C ++ - 1266336583
Ambos produzem a mesma data e o mesmo horário (+/- por minuto).
Solução
Java's Date.getTime retorna o número de milissegundos da época, enquanto o código C ++ espera o número de segundos Da época, então você precisa dividir por 1000 e depois truncar:
int timestampAsInt = (int)(timestampAsLong / 1000);
Java tem apenas um número inteiro assinado não assinado, mas isso deve funcionar.
Outras dicas
long javaTime = someDate.getTime();
int cTime = (int)((javaTime + 500) / 1000);
Eu prefiro arredondar o truncamento, mas você terá que decidir qual é o certo para suas regras de negócios.