mpz_class オブジェクトにバイナリ値を代入したい
私は 2 進数 10011101111001111100010111000011111010010 を持っています。
値オブジェクトie(mpz_class value)に代入したい
ありがとう
これが1つの方法です。それが必要かどうかはまだわかりません。問題を十分に説明していないためです
mpz_class value("1356396726226", 10);
ここに別の方法があります
mpz_class value("10011101111001111100010111000011111010010", 2);
これらの例はどちらも、文字列を取る mpz_class コンストラクターを使用しています。多分それはあなたが探しているものです。
これに対する解決策を見つけた人が、説明されている機能を実現するためのより良いオプションを持っていることを願って、これを書いています。
GMP は、mpz 構造をバイナリにエクスポートおよびインポートする機能を提供します。
mpz_import(mpz_t rop, size_t count, int order, size_t size, int endian, size_t nails, const void *op)
mpz_export(void *rop, size_t *countp, int order, size_t size, int endian, size_t nails, const mpz_t op)
それらについては、整数のインポートとエクスポートで詳しく説明されています。通常、mpz_export コマンドを使用して mpz_t 構造をエクスポートすると、バイナリ配列が W|W|W|W|W の形式で出力されます。ここで、W は Word として指定したバイナリ バイトのグループです。order パラメータは Word でのバイナリのエンディアンを指定し、endian パラメータは W (バイナリ バイトのグループ) 内のエンディアンを指定します。
したがって、上記の場合、数値のバイナリ表現がある場合
const char num[100];
// assuming some initialization of num from may be inbound network packet?
バイナリを使用して mpz_t を作成するには、次のようにします。
mpz_t res; mpz_init(res);
mpz_import(res, 100, -1, 1, -1, 0, num);
バイトがリトル エンディアンで、Word のサイズが 1 バイトであると仮定します。