如何解释使用单字节的最高位 - Pcapng时间格式" if_tsresol"

时间:2017-11-08 14:46:00

标签: bit pcap

我正在编写一个库来解析文件格式(pcapng)documented here。在我遇到问题的一个特定部分中,它是一个定义如何解析long时期/时间变量的选项。根据规范

,选项if_tsresol由单个octlet / byte定义
  

if_tsresol选项标识时间戳的分辨率。如果   最高有效位等于零,其余位表示   时间戳的分辨率为10的负幂(例如6   表示微秒分辨率,时间戳是数字   自1970年1月1日以来的微秒)。如果最高有效位等于   一,剩余的比特表示分辨率为负功率   2表示(例如10表示1/1024秒)。如果此选项不存在,   假设分辨率为10 ^ -6(即时间戳具有相同的分辨率   解决标准' libpcap'时间戳)。

     

示例:' 6'。

我很高兴这两种情况都有效。例如。对于第一个,如果值为' 0'它表示自1970年以来的几秒钟,' 3'是指自1970年以来的毫秒,' 9'将意味着微秒等。

我对第二种情况感到满意,10意味着它的1/1024秒(即接近几毫秒),20意味着1/1048576秒(即接近微秒)

我的困惑在于最重要的位"以及如何在这两者之间做出选择。我的理解是Most Significant Bit实际上是位序列中最左边的位。

因此,以第一个例子为例,' 3'位是00000011,所以最重要的位等于零?

然而,这个第一个有效位不会在整个字节为128或更大之前停止为零,在这种情况下,第二个选项'没有意义,因为我们期待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)

1 个答案:

答案 0 :(得分:0)

  

我应该忽略字节本身计算中的第一位吗?

是。正如pcapng规范所说:

  

如果最高有效位等于1,其余位表示分辨率为2的负幂(例如10表示1/1024秒)。

所以第一位是一个标志,其余位是值,你在进行计算时忽略了第一位。