문제

6 바이트가 포함 된 바이트 배열이 있습니다. 마지막 2는 포트 번호를 나타내는 동안 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을 0 대신에 넣습니다.

다른 팁

    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 바이트를 가져 와서 큰 엔디 언 번호로 사용합니다.

일반적으로 네트워크 패킷에서 포트 번호는 Big-Endian으로 전송됩니다 (주소가 낮은 바이트가 더 중요 함).

코드는 바이트 번호 I+4를 사용하여 MSB로, 바이트 I+5를 포트 번호의 LSB로 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top