任意の大きなビッグインをビットシーケンスに保存する方法は、後で標準のBigInt構造体に変換するためにのみですか?

cs.stackexchange https://cs.stackexchange.com/questions/128035

  •  29-09-2020
  •  | 
  •  

質問

ビットストリームにビッグインを符号化する方法を想像しようとしているので、文字通りビットのシーケンスだけです。その後、このビットストリームをデコードすると、標準のビッグインブソートのデータ構造(符号付きの小整数の配列)が生成されます。どのようにBigIntを一連のビットとしてエンコードすることができますか、そしてそれをどのように復号するのでしょうか。ビット単位の操作を正しく実行する方法や、32または64より大きいビットで任意の数の符号化方法はありません。言語が必要な場合は、JavaScriptでこれを実行します。

例えば、これはバイトを取り、それを単一のビットストリームに変換します。

function arrayOfBytesTo32Int(map) {
  return map[0] << 24
    | map[1] << 16
    | map[2] << 8
    | map[3]
}
.

任意の長いビットシーケンスに同じ種類のものをどのようにしますか?

役に立ちましたか?

解決

例としてエリアスデルタまたはガンマコーディングを見る。

他のヒント

任意の長さの整数の多くの一般的なエンコーディング。最も使用されている表現は次のとおりです。

  • 長さデータ表現、ここでバイト数/単語数が最初に書き込まれ、続いてデータが続きます。
  • 「継続ビット」表現。ワードサイズが b <> bビットである場合、整数は b - 1 ビットのグループに分割され、上位ビットは、次のバイトがあるか否かを示す。

あなたはこれらを混在させて一致させることができます。 ASN.1基本エンコーディング規則ここで、一般的なケースでは、連続ビットを使用してベース128で長さフィールドが符号化される。 ASN.1 BERは、VoIP、SNMP、LDAPなどの多くのネットワークプロトコル、および暗号化、大きな整数を表すことは一般的なものです。

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top