代码之家  ›  专栏  ›  技术社区  ›  Joe

如何使用单字节Pcapng时间格式“if\u tsresol”的最高有效位进行解释

  •  0
  • Joe  · 技术社区  · 7 年前

    我正在编写一个库来解析文件格式(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)
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   user9065877    7 年前

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

    对正如pcapng规范所述:

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

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