我有一个字节数组,其中包含 6 个字节,最后 2 个表示端口号,同时搜索两种将这些最后一个字节转换为端口号的方法,我遇到了这个片段,
int port = 0;
port |= peerList[i+4] & 0xFF;
port <<= 8;
port |= peerList[i+5] & 0xFF;
它有效,但我需要澄清它是如何工作的?
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.
======================= | byte 5 | byte 6 | |----------|----------| | 01010101 | 01010101 | =======================
基本上,它需要字节#5,向左移位8位,0101010100000000
然后使用按位或运算符将字节6放在零的位置。
代码只是从数组中取出最后 2 个字节并将它们用作大端数。
通常在网络数据包中,端口号以大端序传输(意味着地址较低的字节更重要)。
该代码将字节号 i+4 用作端口号的 MSB,字节 i+5 用作端口号的 LSB。