将字符数组转换为 std::string 以传递到 std::bitset seg 错误
Converting an array of chars to std::string in order to pass into std::bitset seg fault
在你投反对票之前,请仔细阅读,它确实很有趣。基本上,我想将数组类型转换为char
std::string
以便使用std::bitset
操作,但是当我尝试在运行时创建bitset
对象时,出现此错误。
在抛出"std::invalid_argument"实例后终止调用 what((: bitset::_M_copy_from_ptr 中止(核心转储(
这是代码
#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;
}
我还尝试了一些其他类型的转换,其中包含char
和std::string
的std::stringstream
和指针,无论我传递到该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(。
自的std::string
char BYTE_4[4] = { 1, 0, 0, 0};
与构造的std::string
没有什么不同
char BYTE_4[4] = { 1, ' ', ' ', ' '};
您只有由std:string
中1
的整数值表示的char
。这就是问题的根源。
为了能够从std::string
构造std::bitset
,您需要std::string
仅包含字符'1'
或'0'
。因此,您需要使用字符'1'
和'0'
,而不是整数值1
和0
。
您可以使用:
char BYTE_4[] = {'1', '0', '0', '0', ' '};
std::string str_BYTE_4 = std::string(BYTE_4);
或
char BYTE_4[4] = {'1', '0', '0', '0'};
std::string str_BYTE_4 = std::string(BYTE_4, 4);
为了能够从std::string
构建std::bitset
.
对于它的价值:
std::bitset<32> str_BYTE_4_bit(std::string());
创建一个值由 32 个零位组成的bitset
。
std::bitset<32> str_BYTE_4_bit(std::string("1000"));
创建一个bitset
,其值由 28 个前导位组成,这些位为零,最后 4 位为 1000。
- 如何打印大于"无符号长长"的"std::bitset"的十进制值?
- 关于 std::bitset 构造函数的几个问题?
- 如何以滑动窗口方式从 std::bitset 读取位并将它们转换为 int?
- 在哪里可以找到 std::bitset 的数据成员?
- 对于std::bitset,是否有一个ffs()等价物
- OMNeT++ cPacket as std::bitset 以应用 Reed-Solomon 编码
- 将字符数组转换为 std::string 以传递到 std::bitset seg 错误
- std::bitset 哈希函数算法
- 与STD :: BITSET的工会成员的结构填充
- 为什么 MSVC 在实现 std::bitset::count 时不使用 __popcnt?
- 如何在数字大于类型 size_t 的最大数量时使用 std::bitset
- 从STD :: BITSET ::操作员[]扣除模板
- 重载 std::bitset 的移位运算符
- 在编译时初始化 c++ std::bitset
- 为什么 std::bitset 只支持整型数据类型?为什么不支持浮点数?
- g++ 内存不足为 std::bitset 分配
- 使用 std::bitset 时程序崩溃,但仅在使用 VC 2015 编译时崩溃
- 使用std :: bitset进行双重表示
- STD :: BITSET ::参考对象在STD :: BITSET ::操作员[]中创建的寿命
- 改变std :: bitset中一系列位值的最有效方法