任意の大きなビッグインをビットシーケンスに保存する方法は、後で標準のBigInt構造体に変換するためにのみですか?
-
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などの多くのネットワークプロトコル、および暗号化、大きな整数を表すことは一般的なものです。
所属していません cs.stackexchange