You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让boost::multiprecision::int256_t正确解析补码形式十六进制负数

解决方法

问题根因

boost::multiprecision::int256_t 从十六进制字符串构造实例时,默认会将输入的十六进制值按无符号正整数解析,不会主动将最高位为1的输入识别为补码形式的负数,因此才会输出你看到的超大正整数值。

修复方案

你可以先将十六进制字符串解析为无符号的 uint256_t 类型,再强制转换为有符号的 int256_t,这个转换过程会自动遵循补码规则识别正负值,修改后的代码如下:

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

int main(int argc, char* argv[]) {
  std::string hex_str = "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2e";
  // 先解析为无符号256位整数
  boost::multiprecision::uint256_t unsigned_int(hex_str);
  // 强制转换为有符号类型,自动按补码处理
  boost::multiprecision::int256_t signed_int = static_cast<boost::multiprecision::int256_t>(unsigned_int);

  std::cout << signed_int << std::endl;
}

运行上述代码即可输出你预期的 -1234。


内容的提问来源于stack exchange,提问作者Thomas Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:36:03