IPv6 アドレスを使用した算術演算 (大きな整数)
-
22-08-2019 - |
質問
次の形式で IPv6 アドレスを使用しています。
FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
内部的には、それらを配列に保存します。
TIp6Bytes = array [0..15] of Byte;
加算、除算、乗算など、さまざまな方法で IPv6 アドレスを操作する必要があります。誰かがこれを行う良い方法を提案できますか?
Delphi 2009 を使用していることを言及すべきだったと思います。
解決 2
多くの提案を試してみましたが、私のニーズをすべて満たし、バグのないライブラリを見つけることができませんでした。もう少し詳しく検索したところ、Alex Ciovanu による比較的新しいライブラリを見つけました。これは BigInteger (および Big Cardinals) をシームレスに実行し、通常の整数や基数などを操作するのとほぼ同じ方法で BigIntegers (および Big Cardinals) を操作できるようにします。
BigInteger と同様に、このライブラリは非常に便利な機能を多数提供します。Readme より:
- 一連の一般的なコレクションクラス(リスト、辞書、ハッシュセットなど)。
- 日付/時刻機能はすべていくつかの構造に組み合わされています(.NETのデータタイム構造に相当する)
- 各組み込みのDelphiタイプ(コレクションのデフォルトとして使用)のデフォルト「サポートクラス」のセットを定義するタイプサポートコンセプト。カスタムデータ型には、カスタム「タイプサポート」クラスを登録できます。
- BigCardinal および BigInteger データ型。
- Delphi のスマート ポインター
ライブラリは積極的に開発されています。実際、作者は私が見つけた小さなバグを 1 日以内に修正しました。
ライブラリについて詳しくは、こちらをご覧ください。 アレックスの ブログを作成し、DeHL をダウンロードします Googleコード.
他のヒント
ジェスKlinkeはパスカルここのBIGNUMユニットを書きました。
私は個人的にこのライブラリを使用していない免責。
私はあなたが追加することができるならば、あなたは、減算乗算と加算を使用して分割するために使用することができると言うでしょう。私は、オーバーフローは単に無視されると仮定すべきか?
私はXORを使用してビット指向の変数を追加する方法を思い出すように見えます。私は今、その答えを探しています。
うまくいけば、これは正しい方向にあなたを指します。私はそのXORコードを見つけることができれば、私はあなたのためにそれを掲載する予定です。
ここでは、次のとおりです。 ビット演算 排他的論理和は、多くの場合、ビット単位の操作に使用されます。例: 1 XOR 1 = 0 1 XOR 0 = 1 1110 XOR 1001 = 0111(これはキャリー無し加算と等価である)
と参照は次のようになります。 http://www.absoluteastronomy.com/topics/Exclusive_disjunctionする