我正在编写一个库来解析文件格式(pcapng)
documented here
. 有一个特别的部分我遇到了麻烦,它是一个选项,定义了
long
应分析历元/时间变量。选项
if_tsresol
if\u tsresol选项标识时间戳的分辨率。如果
最高有效位等于零,其余位表示
时间戳的分辨率为10的负幂(例如6
自1970年1月1日以来的微秒)。如果最高有效位等于
/2(例如,10表示1/1024秒)。如果此选项不存在,
假设分辨率为10^-6(即时间戳具有相同的分辨率)
示例:“6”。
我对这两种情况都很满意。E、 g.对于第一个,如果值为“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)