سؤال

في C/C++, إذا المتعددة البايت واسعة حرف (wchar_t) قيمة تنتقل من big-endian النظام endian طفيف النظام (أو العكس بالعكس) ، وسوف يخرج نفس القيمة على الجانب الآخر ؟ أو سوف بايت تحتاج إلى تبديل?

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

المحلول

ونعم سوف تحتاج لمقايضتهم.
سيتم استرداد بايت من نقل في نفس الترتيب الذي وضعت فيها فقط في الطرف الآخر في ترتيب هذه بايت له معنى مختلف. لذلك تحتاج إلى تحويلها إلى الصحيح endian نيس (هو أن كلمة؟).

وهذه الطريقة مجربة وحقيقية هو تحويل للتواصل ترتيب بايت قبل النقل. ثم تحويله إلى استضافة ترتيب بايت معين (من أجل بايت الشبكة) على إيصال.

وهناك مجموعة من وظيفة للمساعدة في تحويل endian:

ntohs   Convert a 16-bit quantity from network byte order to host byte order
ntohl   Convert a 32-bit quantity from network byte order to host byte order
htons   Convert a 16-bit quantity from host byte order to network byte order
htonl   Convert a 32-bit quantity from host byte order to network byte order

وفقط لإضافة صعيد آخر من الحذر.
أنظمة مختلفة تستخدم حجم مختلفة لwchar_t ذلك لا تفترض sizeof (wchar_t) == 2.

وبالإضافة إلى ذلك قد يستخدم كل مضيف شكل تمثيلي مختلف لwchar_t.
للمساعدة في التعامل مع هذا معظم أنظمة تحويل النص إلى صيغة معروفة للنقل (UTF-8 أو UTF-16 هي خيارات جيدة). وتحويل النص إلى صيغة محددة المضيف في الطرف الآخر.

هل يمكن أن ننظر في وحدة العناية المركزة IBM لهذا لديه كل هذه الوظيفة.

نصائح أخرى

وتحويل Endian غير كاف ونتيجة لذلك لا حاجة. Sizeof (wchar_t) يختلف، وبالتالي فإن الترميز أيضا. وبالتالي، تحتاج إلى الاتفاق على تنسيق تبادل. الخيار المنطقي هو UTF-8. ولكن منذ UTF-8 هو المنحى بايت، لم يكن لديك قضايا endianness بعد الآن.

نعم, تحتاج إلى تنفيذ endian التحويل.تحدد بعناية الخاص بك شكل التسلسل ، أيعلى ترتيب بايت من البيانات التي يتم إرسالها عبر الشبكة أو تخزينها في ملف قرص.ثم عند إرسال بيانات التحويل من الأم إلى سلك شكل (قد أو قد لا تتطلب بايت مبادلة) ، عند تلقي البيانات تحويل من سلك إلى تنسيق أصلي (مرة أخرى قد أو قد لا تتطلب بايت مبادلة).عليك أن تختار سلك الصيغة التي سيتم استخدامها من قبل الغالبية العظمى من العملاء للتقليل من متوسط كمية بايت مبادلة.

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