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

C++如何将uint256类型大数字符串转换为vector<unsigned char>

uint256十进制字符串转32字节vector实现方案

方案1:无第三方依赖手动实现

思路:逐位处理十进制字符串,模拟十进制转256进制的过程,直接生成目标字节数组,无需引入任何外部库。
实现代码:

#include <vector>
#include <string>

std::vector<unsigned char> uint256_str_to_vec(const std::string& dec_str) {
    // 初始化32字节全0的vector,默认大端序存储
    std::vector<unsigned char> res(32, 0);
    for (char c : dec_str) {
        int digit = c - '0';
        // 现有值整体乘10
        uint16_t carry = 0;
        for (int i = 31; i >= 0; --i) {
            uint16_t tmp = res[i] * 10 + carry;
            res[i] = tmp & 0xFF;
            carry = tmp >> 8;
        }
        // 加上当前位的数字
        carry = digit;
        for (int i = 31; i >= 0 && carry; --i) {
            uint16_t tmp = res[i] + carry;
            res[i] = tmp & 0xFF;
            carry = tmp >> 8;
        }
        // 输入符合uint256范围,carry最终一定为0无需额外处理
    }
    return res;
}

该实现默认输出大端序字节数组,和0xffffff...fff的字面量字节顺序完全一致。如果需要小端序,反转返回的vector即可。

方案2:使用Boost.Multiprecision实现

你尝试使用的256位无符号整型类型可以直接通过字符串构造,无需复杂转换,再通过库自带的export_bits接口导出字节即可。
实现代码:

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

using uint256_t = boost::multiprecision::number<
    boost::multiprecision::cpp_int_backend<256, 256, 
    boost::multiprecision::unsigned_magnitude, 
    boost::multiprecision::unchecked, void>
>;

std::vector<unsigned char> uint256_str_to_vec(const std::string& dec_str) {
    uint256_t num(dec_str); // 直接通过十进制字符串构造256位无符号数
    std::vector<unsigned char> res;
    res.reserve(32);
    // 第四个参数为false表示导出大端序,true为小端序
    boost::multiprecision::export_bits(num, std::back_inserter(res), 8, false);
    // 不足32字节时前面补0,保证总长度为32
    if (res.size() < 32) {
        res.insert(res.begin(), 32 - res.size(), 0);
    }
    return res;
}

注意事项

  • 两种方案输出的vector大小固定为32字节,符合要求,输入为uint256最大值时得到的就是32个0xff的数组。
  • 如果业务需要压缩前导0,只需要在返回前遍历数组,去掉开头的连续0即可,最终大小不会超过32字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:06:00