مقتطف من التوضيح صفيف بايت إلى رقم المنفذ

StackOverflow https://stackoverflow.com/questions/1021463

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي مجموعة بايت يحتوي على 6 بايت مشاركة 2 تمثل رقم المنفذ أثناء البحث عن وسيلة اثنين من تحويل هذه الأخيرة إلى بايت إلى رقم منفذ، جئت عبر هذا المقتطف،



            int port = 0;
        port |= peerList[i+4] & 0xFF;
        port <<= 8;
        port |= peerList[i+5] & 0xFF;

ويعمل ولكن انا بحاجة الى بعض التوضيح عن الطريقة التي يعمل؟

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

المحلول

<اقتباس فقرة>
  =======================
  |  byte 5  |  byte 6  |
  |----------|----------|
  | 01010101 | 01010101 |
  =======================

والأساس، فإنه يأخذ بايت رقم 5، والتحول هو 8 بت إلى اليسار مما أدى إلى 0101010100000000 ثم يستخدم أحادي المعامل أو المشغل لوضع بايت 6 في مكان الأصفار.

نصائح أخرى

    int port = 0;                       // Start with zero
    port |= peerList[i+4] & 0xFF;       // Assign first byte to port using bitwise or.
    port <<= 8;                         // Shift the bits left by 8 (so the byte from before is on the correct position)
    port |= peerList[i+5] & 0xFF;       // Assign the second, LSB, byte to port.

والرمز ببساطة يأخذ بايت الأخيرة (2) من مجموعة وتستخدمهم وعدد كبير-endian.

وعادة في شبكة الحزم يتم نقل رقم المنفذ في BIG-endian (بمعنى بايت مع العنوان أقل هو أكثر أهمية).

والرمز يأخذ بايت عدد ط + 4 ويستخدم على أنها MSB والبايت ط + 5 كما LSB من رقم المنفذ.

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