64-разрядные без знака на 32-разрядные подписанные - PullRequest
1 голос
/ 16 февраля 2010

Мне нужно преобразовать данные длинных (64-битных) типов данных Java в устаревшие 32-битные (32-битные) типы данных приложений c ++ приложения.

Не беспокойтесь о потере данных, так как данные представляют собой временную метку Linux, которая может занять несколько месяцев, чтобы достичь предела unsigned int.

Есть идеи, какое преобразование применить к этим числам?

Заранее спасибо!

P.S. - пример типов данных:

Java - 1266336527340

C ++ - 1266336583

Они оба выдают одну и ту же дату и примерно в одно и то же время (+/- минуту).

Ответы [ 2 ]

3 голосов
/ 16 февраля 2010

Java Date.getTime возвращает число миллисекунд от эпохи, тогда как код C ++ ожидает число секунд от эпохи, поэтому вам нужно разделить на 1000, затем обрезать:

int timestampAsInt = (int)(timestampAsLong / 1000);

В Java есть только целое число без знака, но это должно работать.

1 голос
/ 16 февраля 2010
long javaTime = someDate.getTime();
int cTime = (int)((javaTime + 500) / 1000);

Я предпочитаю округление, а не усечение, но вам придется решить, какой из них подходит для ваших бизнес-правил.

...