読者です 読者をやめる 読者になる 読者になる

Boost.Multiprecision 文字列からの変換

C++

Boost.Multiprecisionの多倍長整数および多倍長浮動小数点数は、文字列からの変換ができます。


初期化には、explicitなコンストラクタを使用します。
文字列は、char配列、もしくはstd::stringのいずれかを受け取れます。

#include <iostream>
#include <string>
#include <boost/multiprecision/cpp_int.hpp>

using namespace boost::multiprecision;

int main()
{
    cpp_int x("123");
    cpp_int y(std::string("456"));

    std::cout << x << std::endl;
    std::cout << y << std::endl;
}
123
456

再代入には、assign()メンバ関数を使用します。

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>

using namespace boost::multiprecision;

int main()
{
    cpp_int x;
    x.assign("123");

    std::cout << x << std::endl;
}
123

変換できない文字列が渡された場合は、std::runtime_error例外が投げられます。

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>

using namespace boost::multiprecision;

int main()
{
    try {
        cpp_int x("xyz");
    }
    catch (std::runtime_error& e) {
        std::cout << e.what() << std::endl;
    }
}
Unexpected character encountered in input.

参照:
Constructing and Interconverting Between Number Types - Boost Multiprecision Library