스 니펫 설명 바이트 배열은 포트 번호로 배열됩니다
문제
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로 사용합니다.
제휴하지 않습니다 StackOverflow