مقتطف من التوضيح صفيف بايت إلى رقم المنفذ
سؤال
ولدي مجموعة بايت يحتوي على 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 من رقم المنفذ.
لا تنتمي إلى StackOverflow