C++ 将二进制字符串转换为ASCII字符串(C+;+;)
我有一个包含32位二进制的字符串变量。将二进制表示的这4个字符(8位是一个字符)转换回ASCII字符的最佳方法是什么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
例如,一个变量包含“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;i cout尝试使用此方法。示例:
#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;
}