C++ 将二进制字符串转换为ASCII字符串(C+;+;)

C++ 将二进制字符串转换为ASCII字符串(C+;+;),c++,binary,ascii,C++,Binary,Ascii,我有一个包含32位二进制的字符串变量。将二进制表示的这4个字符(8位是一个字符)转换回ASCII字符的最佳方法是什么 例如,一个变量包含“011101000110010101111001110100”,应该将其转换回字符串“test”。如果您使用的是C++11: #include <iostream> #include <string> #include <sstream> #include <bitset> int main() { s

我有一个包含32位二进制的字符串变量。将二进制表示的这4个字符(8位是一个字符)转换回ASCII字符的最佳方法是什么


例如,一个变量包含“011101000110010101111001110100”,应该将其转换回字符串“test”。

如果您使用的是C++11:

#include <iostream>
#include <string>
#include <sstream>
#include <bitset>

int main()
{
    std::string data = "01110100011001010111001101110100";
    std::stringstream sstream(data);
    std::string output;
    while(sstream.good())
    {
        std::bitset<8> bits;
        sstream >> bits;
        char c = char(bits.to_ulong());
        output += c;
    }

    std::cout << output;

   return 0;
}
#包括
#包括
#包括
#包括
int main()
{
std::string data=“0111010111001101110100”;
std::stringstream sstream(数据);
std::字符串输出;
while(sstream.good())
{
std::位集位;
sstream>>位;
char c=char(bits.to_ulong());
输出+=c;
}
std::cout
#包括
#包括
#包括
使用名称空间std;
int main()
尝试
{
string myString=“Hello World”//string对象
vector us;//字符串到每个字符的二进制数组
对于(int i=0;icout尝试使用此方法。示例:

#include <iostream>
#include <bitset>
#include <sstream>
using namespace std;

string BinaryStringToText(string binaryString) {
    string text = "";
    stringstream sstream(binaryString);
    while (sstream.good())
    {
        bitset<8> bits;
        sstream >> bits;
        text += char(bits.to_ulong());
    }
    return text;
}

int main()
{
    string binaryString = "0100100001100101011011000110110001101111001000000101011101101111011100100110110001100100";
    cout << "Binary string: " << binaryString << "!\n";
    cout << "Result binary string to text: " << BinaryStringToText(binaryString) << "!\n";

    return 0;
}
以下是我的尝试:

std::string str2bits(const std::string_view &str, bool big_endian = false)
{
    std::string ret;
    ret.reserve(str.size() * 8);
    for (size_t i = 0; i < str.length(); ++i)
    {
        const uint8_t ord = uint8_t(str[i]);
        for (int bitnum = (big_endian ? 0 : 7);; (big_endian ? (++bitnum) : (--bitnum)))
        {
            if ((big_endian && bitnum >= 8) || (!big_endian && bitnum < 0))
            {
                break;
            }
            if (ord & (1 << bitnum))
            {
                ret += "1";
            }
            else
            {
                ret += "0";
            }
        }
    }
    return ret;
}
std::string str2位(const std::string\u view&str,bool big\u endian=false)
{
std::字符串ret;
净储备(str.size()*8);
对于(大小i=0;i=8)| |(!big_endian&&bitnum<0))
{
打破
}

如果(作战需求文件),(1 0111010101100101110001111001110100

人们只能想知道,你最终是如何将ASCII编码的文本存储为字符的文本二进制表示形式的。也许解决问题的根本原因会更有成效。检查一下就像猜测一样——这听起来像是一个家庭作业,
攻击教授是从DavidHeffernan在代码> >代码> @你是完全正确的,我对C++是相当新的,并且只是发现了STD::BITSET。我知道我的方法确实是非常错误的!谢谢,这个解决方案起作用了,我刚刚发现了STD::BITSET,所以我将设计一个更优雅的解决方案。
Binary string: 0100100001100101011011000110110001101111001000000101011101101111011100100110110001100100!                                                                                                  
Result binary string to text: Hello World! 
std::string str2bits(const std::string_view &str, bool big_endian = false)
{
    std::string ret;
    ret.reserve(str.size() * 8);
    for (size_t i = 0; i < str.length(); ++i)
    {
        const uint8_t ord = uint8_t(str[i]);
        for (int bitnum = (big_endian ? 0 : 7);; (big_endian ? (++bitnum) : (--bitnum)))
        {
            if ((big_endian && bitnum >= 8) || (!big_endian && bitnum < 0))
            {
                break;
            }
            if (ord & (1 << bitnum))
            {
                ret += "1";
            }
            else
            {
                ret += "0";
            }
        }
    }
    return ret;
}