64 بت غير موقعة ل 32 بت وقعت
-
20-09-2019 - |
سؤال
أحتاج إلى تحويل بيانات DataType (64 بت) Java Long (64 بت) إلى نوع بيانات C ++ Legacy غير موقعة (32 بت).
لا تقلق بشأن فقدان البيانات لأن البيانات هي Linux Timestamp ، والتي ستستغرق من AEONS لضرب حد INT غير الموقّع.
أي فكرة ما هو التحول الذي يجب تطبيقه على هذه الأرقام؟
شكرا لك مقدما!
PS - مثال من نوع البيانات:
Java - 1266336527340
C ++ - 1266336583
كلاهما ينتجون نفس التاريخ ، وفي نفس الوقت (+/- دقيقة).
المحلول
جافا Date.getTime يعيد عدد ميلي ثانية من الحقبة ، في حين يتوقع رمز C ++ عدد ثوان من الحقبة ، لذلك تحتاج إلى تقسيم 1000 ثم اقتطاع:
int timestampAsInt = (int)(timestampAsLong / 1000);
لدى Java عددًا صحيحًا موقّعًا غير موقّع ، ولكن هذا يجب أن ينجح.
نصائح أخرى
long javaTime = someDate.getTime();
int cTime = (int)((javaTime + 500) / 1000);
أفضل التقريب على الاقتطاع ، ولكن سيتعين عليك أن تقرر ما هو مناسب لقواعد عملك.
لا تنتمي إلى StackOverflow