C++ 将字符串转换为字符,未正确转换空格字符

C++ 将字符串转换为字符,未正确转换空格字符,c++,string,char,C++,String,Char,我使用的代码允许我将任何类型的int、double、float、char转换为string。我测试了程序并选择char作为类型值 stringstream ss; string s; char c = '3'; ss << c; ss >> s; cout << "CHAR" << endl; bitset<8> bs2( (char) c ); for( int i = (in

我使用的代码允许我将任何类型的int、double、float、char转换为string。我测试了程序并选择char作为类型值

stringstream ss;
    string s;
    char c = '3';
    ss << c;
    ss >> s;

    cout << "CHAR" << endl;
    bitset<8> bs2( (char) c );
    for( int i = (int) bs2.size(); i >= 0; i-- )
        cout << bs2[i] << " ";
    cout << endl;

    bitset<8> bs1( (char) s.c_str()[0]);
    cout << "STRING" << endl;
    for( int i = (int) bs1.size(); i >= 0; i-- )
        cout << bs1[i] << " ";
    cout << endl;
但我发现了一件奇怪的事。我设置了char c='',但该值未正确转换

CHAR
0 0 0 1 0 0 0 0 0 
STRING
0 0 0 0 0 0 0 0 0 
我找不到解释,也找不到我做错了什么

std::string的运算符>>将仅在遇到第一个空白字符之前读取。如果要提取std::stringstream中的所有信息,请使用str成员函数:

s = ss.str();
有关参考信息,请参见std::string的和

运算符>>的说明,只有遇到第一个空白字符时才会读取。如果要提取std::stringstream中的所有信息,请使用str成员函数:

s = ss.str();

有关参考信息,请参见和的说明。

运算符不会返回空格,请使用ss.str;要获取stringstream值。

>运算符不会返回空格,请使用ss.str;获取stringstream值。

是否提取运算符忽略了空格?嗯,好问题。如何将任何类型转换为字符串和字符串转换为任何类型??你有什么建议吗?你确定那是你真正的代码吗?您应该得到位集的索引越界错误,因为您是从bs2.size开始的,而不是bs2.size-1那么,您是否注意到您的代码打印的是9位而不是8位虽然它可以工作,但并不安全。std::bitset::operator[]不执行边界检查,但对边界值进行索引的行为尚未定义。您可以使用std::bitset::test来验证这一点,它执行边界检查。另外,您可以查看输出,看到打印了9位数字,这对于包含8个元素的数组是不正确的。是否提取运算符忽略了空格?嗯,好问题。如何将任何类型转换为字符串和字符串转换为任何类型??你有什么建议吗?你确定那是你真正的代码吗?您应该得到位集的索引越界错误,因为您是从bs2.size开始的,而不是bs2.size-1那么,您是否注意到您的代码打印的是9位而不是8位虽然它可以工作,但并不安全。std::bitset::operator[]不执行边界检查,但对边界值进行索引的行为尚未定义。您可以使用std::bitset::test来验证这一点,它执行边界检查。另外,您可以查看您的输出,看到打印了9位数字,这对于包含8个元素的数组来说是不正确的。如果我想转换回去呢?字符串转换为某种类型。我试过了,但它也有同样的效果。我不认为有一种通用的方法可以做到这一点,操作符不需要像您在std::string中看到的那样对称。您可能需要逐个类型地对此进行调查。在char的情况下,您可以使用std::noskipws操纵器指示流不跳过空格,类似于:ss>>std::noskipws>>c。如果我想转换回,该怎么办?字符串转换为某种类型。我试过了,但它也有同样的效果。我不认为有一种通用的方法可以做到这一点,操作符不需要像您在std::string中看到的那样对称。您可能需要逐个类型地对此进行调查。对于char,您可以使用std::noskipws操纵器指示流不跳过空格,类似于:ss>>std::noskipws>>c。