2017-11-08 17 views
0

파일 형식 (pcapng)을 구문 분석 할 라이브러리를 쓰고 있습니다. documented here. 문제가되는 특정 섹션이 있는데, 이것은 long 에포크/시간 변수를 구문 분석하는 방법을 정의하는 옵션입니다. if_tsresol은 사양에 따라 단일 옥텟/바이트로 정의됩니다.1 바이트의 가장 중요한 비트를 사용하여 해석하는 방법 - Pcapng 시간 형식 "if_tsresol"

if_tsresol 옵션은 타임 스탬프의 해상도를 식별합니다. 최상위 비트가 0 인 경우 나머지 비트는 타임 스탬프의 분해능이 음수 10 인 것으로 나타냅니다 (예 : 6 은 마이크로 초 해상도를 나타내며 타임 스탬프는 1970 년 1 월 1 일 이후 마이크로 초임). 최상위 비트가 과 같으면 나머지 비트는 음수 ( )가 2 인 분해능을 나타냅니다 (예 : 10은 1/1024 초를 의미). 이 옵션이 없으면 의 해상도가 10^-6으로 간주됩니다 (즉, 타임 스탬프의 표준 'libpcap'타임 스탬프와 동일한 해상도).

예 : '6'.

두 사례의 작동 방식에 만족합니다. 예 : 첫 번째로 값이 '0'이면 1970 년 이후의 초를 나타내고 '3'은 1970 년 이후의 밀리 초를 의미하고 '9'는 마이크로 초 등을 의미합니다.

두 번째 경우에도 만족합니다. 1/1024 초 (즉 거의 밀리 초), 20 초는 1/1048576 초 (즉 거의 마이크로 초)입니다.

혼란은 "가장 중요한 비트"를 넘어서고,이 두 가지 중에서 선택하는 방법입니다. 내 이해는 Most Significant Bit 비트 시퀀스의 가장 왼쪽 비트입니다.

첫 번째 예제에서 '3'값의 비트는 00000011이므로 가장 중요한 비트는 0입니다. 맞습니까?

그러나이 첫 번째 유효 비트는 전체 바이트가 128 이상이 될 때까지 0이되지 않습니다.이 경우 두 번째 '옵션'은 의미가 없지만 10-30 사이의 숫자가 필요합니다.

바이트 자체 계산의 첫 번째 비트를 무시해야합니까? 그래서 :

00001010 = 10 which is 10 (option 1) 
10001010 = 138 which is 10 (option 2) 

00000110 = 6 which is 6 (option 1) 
10000110 = 134 which is 6 (option 2) 

답변

0

는 바이트 자체의 계산에 첫 번째 비트를 무시하고 내가해야 하는가?

예. pcapng 사양 말한다 같이

를 최상위 비트가 하나 나머지 비트 같으면 중 부정적인 전력과 같은 해상도를 나타내는 2 (예를 들어 10 초 1,024분의 1을 의미한다).

그래서 첫 번째 비트는 플래그이고 나머지 비트는 값이며 계산을 수행 할 때 첫 번째 비트를 무시합니다.