سؤال

عندما أرسل متغير عدد صحيح من عملية واحدة إلى أخرى من خلال مأخذ توصيل، ثم طباعة القيمة في النهاية المستلمة، لا تزال القيمة هي نفسها دون استخدام NTOHL / HTONL، ثم أين أحتاج إلى استخدام هذه الوظائف بخلاف تهيئة هياكل المقبس. أفهم Litte / Big Endian. ولكن لماذا نحتاج إلى تحويل الميناء ورقم الملكية الفكرية إلى ترتيب البايت المضيف / الشبكة عندما تظل القيمة هي نفسها. يرجى توضيح بالتفصيل كيف يتم ترنيرد الكئيب عن الشبكة؟

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

المحلول

إذا كنت تريد أن يكون البرنامج الخاص بك محمول، فما في أي وقت ترسل عددا صحيحا أكبر من 1 بايت في الحجم عبر الشبكة، يجب أولا تحويله إلى ترتيب بايت الشبكة باستخدام htons أو htonl, ، يجب على الكمبيوتر الاستقبال تحويله لاستضافة أمر بايت باستخدام ntohs أو ntohl.

في حالتك، السبب في أن القيمة لا تزال هي نفسها ربما لأن الكمبيوتر المرسل والكمبيوتر الاستقبال من نفس النخلة. وبعبارة أخرى، فإن الكمبيوتر المرسل والكمبيوتر المستقبلي الذي تعمل به هو كل من الإناادر الصغيرة (أو الإناود الكبيرة، مهما كان الحال قد يكون.)

ولكن إذا كنت تريد أن يكون برنامجك محملا، فلا يمكنك الاعتماد على هذا هو الحال دائما. في يوم من الأيام، على سبيل المثال، قد يكون جهاز الكمبيوتر المرسل هو Intel X86، وقد يكون الاستقبال أحد Sun Sparc، ثم يفشل برنامجك إذا لم تستخدم htons.

نصائح أخرى

إذا كنت ترغب في إرسال بيانات من جهاز X86 أو AMD64 إلى جهاز باستخدام معالج PowerPC، في الثنائية التنسيق الذي سترى بسرعة أن بياناتك تواجه "مشكلة NUXI" حيث تعامل المعالجات المختلفة من الأعداد الصحيحة بشكل مختلف ويبدو أن تبديل البايتات. (لا يقومون بالفعل بتبديل البايتات - إنهم يعملون معهم فقط بأمر مختلف.)

عند العمل على X86 أو AMD64، يأتي البايت الأقل أهمية أولا في الذاكرة (بهذه الطريقة يمكنك إجراء إضافة من عناوين الذاكرة المنخفضة إلى الأعلى). تضع PowerPC البايت الأكثر أهمية أولا في الذاكرة (بهذه الطريقة يمكنك فرز الأرقام بناء على البايتات التي تأتي في وقت سابق في الذاكرة - يمكن أن يكون نوع السلسلة والفرز الصحيح هو نفسه تماما.)

إنه يمنع نفسه لأنه على هندسة الخاص بك هو نفس ترتيب الشبكة هو نفس الترتيب الأصلي. إذا كنت لا تتوقع أبدا تجميع التعليمات البرمجية الخاصة بك بنية أخرى، فيمكنك حذف مكالمات Hton / Ntoh. لن يكون الرمز الخاص بك محملا.

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