我发现只是使用boost::multiprecision::import_bits
作品。
template <unsigned Bits, boost::multiprecision::cpp_integer_type SignType,
boost::multiprecision::cpp_int_check_type Checked>
boost::multiprecision::number<
boost::multiprecision::cpp_int_backend<Bits, Bits, SignType, Checked, void>>
rawToBoost(const void *V) {
using namespace boost::multiprecision;
#if BOOST_ENDIAN_BIG_BYTE
static const auto msv_first = true;
#else
static const auto msv_first = false;
#endif
number<cpp_int_backend<Bits, Bits, SignType, Checked, void>> ret;
auto VPtr = reinterpret_cast<const unsigned char *>(V);
import_bits(ret, VPtr, VPtr + (Bits / 8), 0, msv_first);
return ret;
}
boost::multiprecision::int128_t rawToBoost_int128(const void *V) {
using namespace boost::multiprecision;
return rawToBoost<128, signed_magnitude, unchecked>(V);
}
boost::multiprecision::int128_t rawToBoost_int128_safe(const void *V) {
using namespace boost::multiprecision;
return rawToBoost<128, signed_magnitude, checked>(V);
}
boost::multiprecision::uint128_t rawToBoost_uint128(const void *V) {
using namespace boost::multiprecision;
return rawToBoost<128, unsigned_magnitude, unchecked>(V);
}
boost::multiprecision::uint128_t rawToBoost_uint128_safe(const void *V) {
using namespace boost::multiprecision;
return rawToBoost<128, unsigned_magnitude, checked>(V);
}
这是 OP 提到的相同链接(但不同的增强版本)。
https://www.boost.org/doc/libs/1_62_0/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html