당신은 RFC의 Appendix B을 읽어야 할 사람 :
옥텟이 숫자 양에게 그림의 가장 왼쪽 비트를 표시 할 때마다
은 상위 또는 최상위 비트입니다. 즉, 0으로 표시된 비트 이 최상위 비트입니다. 예를 들어, 다음 다이어그램은 값 170 (십진수)을 나타냅니다. 모든 것을 의미
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1 0 1 0 1 0 1 0|
+-+-+-+-+-+-+-+-+
그가 가장 -significant있는 동안 "처음 4 비트는"가장 -significant 것을 당신의 가정을 제외하고 정확합니다.
예. (더 중요한 왼쪽으로 이동하는 것이
byte flagsAndFragmentHi = packet[6];
byte fragmentLo = packet[7];
bool flagReserved0 = (flagsAndFragmentHi & 0x80) != 0;
bool flagDontFragment = (flagsAndFragmentHi & 0x40) != 0;
bool flagMoreFragments = (flagsAndFragmentHi & 0x20) != 0;
int fragmentOffset = ((flagsAndFragmentHi & 0x1F) << 8) | (fragmentLo);
참고 : 7, 8 바이트, 플래그 다음과 같이, 당신은 사람들을 분리 할 수 오프셋 단편을 함유하는 (이 C# .NET을하고있다하더라도, 그 의사를 고려) 8 비트) 부분은 첫 번째 바이트에 있습니다 (IP는 빅 엔디안에서 작동하기 때문에). 일반적으로 다이어그램의 왼쪽에있는 비트는 항상 더 중요합니다.
endianness (http://en.wikipedia.org/wiki/Endianness) 문제와 비슷합니다. – erenon
나는 엔디안에 대해서도 생각했지만 그가 올바른 결과를 얻고 있음을 깨달았다. @ 모르 메시 올 응답이 맞습니다. –
"endianness"sensu stricto는 바이트 안에 _bits_의 번호 매기기가 아니라 큰 구조 안에서 _bytes_의 순서를 나타냅니다. – Mormegil