#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
#define LIT128(HI,LO) ((((uint128_t) HI) << 64) | LO)
uint128_t strhexToUint128(char* str)
{
if(str==0){
return 0;
}
if(strlen(str) > 32){
return 0;
}
if(strlen(str)<=16){
return strtoull(str, nullptr, 16);
}
char tmpStr[17] = {0};
size_t len = strlen(str);
size_t highLen = len - 16;
strncpy(tmpStr, str, highLen);
uint64_t high = strtoull(tmpStr, nullptr, 16);
uint64_t low = strtoull((char*)(str+highLen), nullptr, 16);
uint128_t number = LIT128(high, low);
return number;
}
std::string u128toStr(uint128_t x) {
std::stringstream ss;
ss << x;
return ss.str();
}
16进制字符串与uint128_t互转
于 2022-10-25 00:38:41 首次发布