2017-11-08 15 views
0

ファイル形式を解析するライブラリ(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) 

答えて

0

私はバイト自体の計算に最初のビットを無視するべきか?

はい。 pcapng仕様は言うとおり

最上位ビットが1に等しい場合、残りのビット(例えば10秒の1/1024を意味する)2のような負のパワーとして解像度を示します。

したがって、最初のビットはフラグで残りのビットは値であり、計算を行う際には最初のビットを無視します。

関連する問題