سؤال

أنا أكتب ربط جافا لرمز C ولست على دراية بـ C.

لدي uint64_t وأحتاج إلى إرساله إلى int.هل يعرف أحد كيف يفعل ذلك؟(يرجع ربطي ثم جينت...)

هل كانت مفيدة؟

المحلول

عادة، باستخدام عدد صحيح العرض الدقيق مثل "uint64_t" هو لسبب وجيه. إذا قمت بإلقاء ذلك على INT، فقد لا يكون طوله 64 مليار دولار، فقد يكون لديك مشاكل خطيرة ...

نصائح أخرى

الجواب القصير:

uint64_t foo;
int bar;
bar = foo;

من الناحية الفنية، هذا السلوك غير محدد إذا كانت قيمة foo لا يصلح في int.ومن الناحية العملية، سيتم دائمًا اقتطاع البتات العلوية ببساطة.وإذا أردت أن تكون أكثر صحة، ف:

if (foo-INT_MIN <= (uint64_t)INT_MAX-INT_MIN)
    bar = foo;
else
    /* error case here */

إذا كنت تكتب مغلفات JNI، فإن أفضل مباراة ل UINT64_T طويلة، وليس Int.حتى ذلك الحين سوف تفقد الدقة، حيث لا تحتوي جافا على أنواع غير موقعة (وبالتالي أنت)، وتحتاج إلى أن تكون مستعدا للتحقق من علامة القيمة.

لاحظ أن Java لا يدعم أنواعا غير موقعة.أقرب نوع في جاوة سيكون طويلا، لأنه يحتوي أيضا على 64 بت. لا تفقد صب Uint64 إلى Long Data بيانات لأن عدد البتات هو نفسه، ولكن سيتم عرض قيم كبيرة كأرقام سلبية إذن.

giveacodicetagpre.

hm ... لدي طريقة في C والتي بإرجاع page_id وهو رقم UINT64_T.الآن أحتاج إلى تخزين هذا الرقم في جافا هاشماب.فما هي أفضل طريقة لتخزين uint64_t في جافا هاشماب؟المشكلة هي أنه عندما أقوم بعملية بحث، أحتاج إلى اتخاذ هذه القيمة المحددة في HASHMAP وأظهرتها مرة أخرى إلى UINT64_T حتى أتمكن من استدعاء دالة في رمز C، والتي تتوقع uint64_t كوسيطة.

p.s.لقد فعلت ذلك مع Jlong PID= (Jlong) pid_in_uint64_t؛ حتى الآن جيدة جدا ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top