c – 将一个chars数组转换为std :: string,以便传入std :: bitset seg fault

在你投票之前请仔细阅读,确实有趣.基本上我想将一个类型的char数组转换为std :: string以便使用std :: bitset操作,但是当我尝试在运行时创建bitset对象时,我得到了这个错误.

terminate called after throwing an instance of ‘std::invalid_argument’
what(): bitset::_M_copy_from_ptr Aborted (core dumped)

这是代码

#include <iostream>
#include <cstdlib>
#include <bitset>

int main()
{
    char BYTE_4[4] = { 1, 0, 0, 0};

    std::string str_BYTE_4 = std::string(BYTE_4);

    std::bitset<32> str_BYTE_4_bit( str_BYTE_4);//crash here
    std::cout<<"str_BYTE_4_bit. "<<str_BYTE_4_bit<<std::endl;

    return 0;
}

我还尝试了一些其他类型的转换与std :: stringstream以及char和std :: string的指针,无论我传入std :: bitset构造函数我都得到同样的错误?

这些只是我注释掉并从上面的代码中删除的片段,以显示我尝试过的内容.

//char* BYTE_4 = new char[4];
    //std::stringstream SS;

    //std::string str_BYTE_4 = "0101";
    //SS << BYTE_4;
        //str_BYTE_4 = SS.str();
    //for(int index = 0; index < 4; index++)
        //    str_BYTE_4 += BYTE_4[index];

    //std::string *str_BYTE_4 = new std::string[4];
    //for( int index = 0; index < 4; index++)
        //    BYTE_4[index] = rand()%255;
最佳答案
这是错的:

char BYTE_4[4] = { 1, 0, 0, 0};
std::string str_BYTE_4 = std::string(BYTE_4);

你需要的是一串数字,但你要存储原始字节1和0(不是ASCII“1”和“0”).修复如下:

char BYTE_4[4] = { '1', '0', '0', '0'};
std::string str_BYTE_4 = std::string(BYTE_4, sizeof(BYTE_4));

由于没有null终止符,您必须告诉std :: string构造函数停止的位置(通过传递4作为第二个参数).

更简单的方法是:

std::string str_BYTE_4 = "1000";

至于你得到的invalid_argument异常,你会看到你是否阅读了bitset的文档,这意味着你传递的字符串包含既不是’0’也不是’1’的字符(那些是ASCII字符,其原始整数值是48和49).

转载注明原文:c – 将一个chars数组转换为std :: string,以便传入std :: bitset seg fault - 代码日志