От 64-битного беззнакового до 32-битного знакового
-
20-09-2019 - |
Вопрос
Мне нужно преобразовать данные длинного типа данных Java (64-битные) в устаревший тип данных приложения C++ unsigned int (32-битный).
Не беспокойтесь о потере данных, поскольку данные представляют собой временную метку Linux, и для достижения предела беззнакового целого числа потребуются эоны.
Есть идеи, какое преобразование применить к этим числам?
Заранее спасибо!
P.S.- пример типов данных:
Ява - 1266336527340
С++ - 1266336583
Они оба выдают одну и ту же дату и примерно в одно и то же время (+/- минуту).
Решение
Java Дата.getTime возвращает количество миллисекунды от эпохи, тогда как код C++ ожидает количество секунды из эпохи, поэтому вам нужно разделить на 1000, а затем обрезать:
int timestampAsInt = (int)(timestampAsLong / 1000);
В Java есть только целое число со знаком, а не беззнаковое, но это должно работать.
Другие советы
long javaTime = someDate.getTime();
int cTime = (int)((javaTime + 500) / 1000);
Я предпочитаю округление усечению, но вам придется решить, что подходит для ваших бизнес-правил.