ファイル形式を解析するライブラリ(pcapng)documented hereを作成しています。問題がある特定のセクションがあります。これは、long
エポック/時間変数の解析方法を定義するオプションです。 if_tsresol
オプションは、仕様に従って1オクテット/バイトで定義されています。1バイトの最も重要なビットを使用して解釈する方法 - Pcapng時間形式 "if_tsresol"
if_tsresolオプションは、タイムスタンプの分解能を示します。 最上位ビットがゼロに等しい場合、残りのビットはタイムスタンプの分解能を10の負の倍数として示します(例:6 はマイクロ秒の解像度を意味し、タイムスタンプは1970年1月1日以降の マイクロ秒の数です)。最上位ビットが と等しい場合、残りのビットは、負の電力である (例えば、10は1/1024秒を意味する)として解像度を示す。このオプションが存在しない場合、 の解像度が10^-6と仮定されます(タイムスタンプの標準の 'libpcap'タイムスタンプのタイムコードは と同じです)。
例: '6'。
いずれのケースでもうまくいきます。例えば。最初は、値が '0'の場合は1970年以降の秒を表し、3の場合は1970年以降のミリ秒を表し、 '9'の場合はマイクロ秒などを表します。
2番目のケースにも満足しています1/1024秒(すなわち、ほぼミリ秒)、20は1/1048576秒(すなわちほぼマイクロ秒)を意味する。
私の混乱は、 "Most Significant Bit"を超えており、どのようにこれらの2つを選択するかです。私の理解はMost Significant Bitで、事実上ビットシーケンスの一番左のビットです。
したがって、最初の例では、値 '3'はビット00000011
を持つため、最上位ビットはゼロに等しいでしょうか?
しかし、この最初の有効ビットは、バイト全体が128以上になるまで0になることはありません。その場合、2番目の「オプション」は意味がありません。
バイト自体の計算で最初のビットを無視する必要がありますか?だから、:
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)