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

C++中uint8_t数组赋值后bitset输出报错:bitset::_M_copy_from_ptr

问题原因

你遇到的bitset::_M_copy_from_ptr错误,根源是**std::bitset没有接受uint8_t数组(或其退化指针)的构造函数**。当你写bitset<24>(arr)时,数组arr会退化为uint8_t*,编译器会尝试匹配bitset的const char*构造函数,导致指针类型不兼容,进而触发内部拷贝逻辑的错误。

另外你的代码还存在一个小问题:没有使用std::前缀调用cout,因为你没有声明using namespace std;,这会导致编译错误。

解决方案

要将uint8_t数组转为24位二进制字符串,有两种常用方法:

方法1:拼接为整数后转bitset

将3个uint8_t元素通过位运算拼接成一个24位的整数,再传入bitset:

#include <iostream>
#include <bitset>
#include <cstdint>

int main()
{
    uint8_t arr[3]{0};
    uint8_t currBlock{arr[0]};
    int flag{1};
    currBlock ^= (-flag ^ arr[0]) & (1UL << 3);

    // 拼接数组为24位整数(arr[0]为最高8位,arr[2]为最低8位)
    uint32_t combined = (static_cast<uint32_t>(arr[0]) << 16) | 
                        (static_cast<uint32_t>(arr[1]) << 8) | 
                        arr[2];
    std::cout << "Buffer is : " << std::bitset<24>(combined).to_string() << std::endl;

    arr[0] = currBlock;
    combined = (static_cast<uint32_t>(arr[0]) << 16) | 
               (static_cast<uint32_t>(arr[1]) << 8) | 
               arr[2];
    std::cout << "Buffer is : " << std::bitset<24>(combined).to_string() << std::endl;

    return 0;
}

方法2:逐个元素转二进制后拼接

直接将每个uint8_t元素转为8位二进制字符串,再按顺序拼接:

#include <iostream>
#include <bitset>
#include <cstdint>
#include <string>

int main()
{
    uint8_t arr[3]{0};
    uint8_t currBlock{arr[0]};
    int flag{1};
    currBlock ^= (-flag ^ arr[0]) & (1UL << 3);

    // 拼接每个元素的二进制字符串
    std::string bits;
    for (int i = 0; i < 3; ++i) {
        bits += std::bitset<8>(arr[i]).to_string();
    }
    std::cout << "Buffer is : " << bits << std::endl;

    arr[0] = currBlock;
    bits.clear();
    for (int i = 0; i < 3; ++i) {
        bits += std::bitset<8>(arr[i]).to_string();
    }
    std::cout << "Buffer is : " << bits << std::endl;

    return 0;
}
输出结果

两种方法都会输出符合预期的结果:

Buffer is : 000000000000000000000000
Buffer is : 000010000000000000000000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:40:21