我正在编写一个库来解析文件格式(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)
答案 0 :(得分:0)
我应该忽略字节本身计算中的第一位吗?
是。正如pcapng规范所说:
如果最高有效位等于1,其余位表示分辨率为2的负幂(例如10表示1/1024秒)。
所以第一位是一个标志,其余位是值,你在进行计算时忽略了第一位。