1

我有一个字节数组,其中包含 6 个字节,最后 2 个表示端口号,同时搜索两种将这些最后一个字节转换为端口号的方法,我遇到了这个片段,



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

它有效,但我需要澄清它是如何工作的?

4

3 回答 3

3
    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.
于 2009-06-20T11:42:32.707 回答
1
  =======================
  |  byte 5  |  byte 6  |
  |----------|----------|
  | 01010101 | 01010101 |
  =======================

基本上,它需要字节#5,向左移位8位,0101010100000000然后使用按位或运算符将字节6放在零的位置。

于 2009-06-20T11:42:54.483 回答
0

代码只是从数组中取出最后 2 个字节并将它们用作大端数。

通常在网络数据包中,端口号以大端序传输(意味着地址较低的字节更重要)。

该代码将字节号 i+4 用作端口号的 MSB,字节 i+5 用作端口号的 LSB。

于 2009-06-20T11:41:03.583 回答