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

std::from_chars解析int8_t类型二进制字符串的Bug问询

std::from_chars解析二进制字符串到int8_t的异常问题

当以二进制(base=2)格式将字符串解析为int8_t类型时,std::from_chars会触发错误,而std::stoi却能正常完成解析。以下程序的两个代码块解析同一二进制字符串,第二个代码块中的第一个断言会调用std::abort终止程序,std::stoi则无异常抛出。

编译命令

g++ -std=c++17 -O0 -g main.cc -o main

程序代码

// Compile: g++ -std=c++17 -O0 -g main.cc -o main
#include <string>
#include <cassert>
#include <charconv>
#include <cstdint>

int main()
{
    {
        std::string bits = "10011100";
        int base = 2;
        std::int8_t num = std::stoi(bits.c_str(), nullptr, base);
        assert(num == -100);
    }

    {
        // std::from_chars在类型为int8_t且base=2时存在问题
        std::string bits = "10011100";
        int base = 2;
        std::int8_t num;
        auto [ptr, ec] = std::from_chars(bits.data(),
                                         bits.data() + bits.size(),
                                         num,
                                         base);
        assert(ec == std::errc()); // 触发std::abort
        assert(num == -100);
    }
}

运行输出

# ./main
main: main.cc:24: int main(): Assertion `ec == std::errc()' failed.
Aborted

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:07:36