سؤال

أنا أستخدم موقع بايت غير موقعة (int8_t) يلقي بحزم.

uint32_t(uint8_t(byte)) << n

هذا يعمل باستخدام دول مجلس التعاون الخليجي على Intel Linux. هل هذا محمول لمنصات / مترجم أخرى، على سبيل المثال PowerPC؟ هل هناك طريقة افضل لفعله؟ باستخدام Bitset غير ممكن في حالتي. أنا أستخدم Stdint عبر دفعة

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

المحلول

إذا كنت تستخدم boost/cstdint.hpp من مكتبة عدد صحيح دفعة، ثم نعم، تكون TypeDefs محمولة (عبر النظام الأساسي). boost/cstdint.hpp يهدف رأس إلى تنفيذ وظيفة C99 Stdint.h في C ++.

من دعم الوثائق:

يوفر الرأس مفيد Typedef لكتابة التعليمات البرمجية المحمولة التي تتطلب عرضا صحيحا معينا. جميع Typedef في مساحة الاسم.

نصائح أخرى

إنه غير محمول، لأن الأنواع UINT32_T و UINT8_T ليست جزءا من معيار C ++. جميع هذه المعالم تعتمد بطبيعته على التنفيذ.

في الممارسة العملية، نعم، من المحتمل أن تعمل على الأرجح على معظم المنصات الأخرى التي تواجهها (خاصة إذا تم تشغيل دفعة إليه). ومع ذلك، إذا كنت تكتب هذه القيم المعبأة على الملفات أو مآخذ الشبكة، فسوف تضطر إلى التعامل مع طلب البايت (مثال PowerPC الخاص بك لديه أمر BIG-ENDIAN BYTE أثناء وجود Intel Little-Endian). في هذا الصدد، سوف يتصرف الرمز بشكل مختلف عن بنية الأجهزة المختلفة.

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