从 ascii 到位但不是相反
from ascii to bits but not working the contrary
我陷入了这个问题。
我正在编写一个 C++ 程序,其中:
1- 你写了一个 6 个字符的字符串
2- 该字符串被转换为位(我们称之为 'A')
3- 这串位被复制到另一个字符串中并通过 reverse() 方法还原(我们称之为 'B')
4-在A和B之间执行按位或(我们称此结果为'C')
5-(这是我被卡住的地方)C 应该转换成 ASCII...但我不是。我得到输出奇怪的 symbols/question 标记。
代码如下:
#include <iostream>
#include <bitset>
#include <sstream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
// PART ONE: from string to bits
string input;
cout << "Insert the 6 letters string you want to convert: \n";
do
{
getline(cin, input);
if (input.length() < 6 || input.length() > 6)
{
cout << "\nIt must be 6 letters!\n";
}
} while (input.length() != 6);
string inbits;
bitset<8> newbits;
for (size_t i = 0; i < input.size(); ++i)
{
newbits = bitset<8>(input.c_str()[i]);
string aux = newbits.to_string<char, std::string::traits_type, std::string::allocator_type>();
inbits.append(aux);
}
cout << endl << inbits << endl;
// PART TWO: bitwise or
string inverted = inbits;
reverse(inverted.begin(), inverted.end());
bitset<48> bstr1(inbits), bstr2(inverted), finale;
finale = bstr1 | bstr2; // here it is done the bitwise OR
cout << finale << endl;
string ored = finale.to_string<char, std::string::traits_type, std::string::allocator_type>();
// PART THREE: from bits to string of char
stringstream sstream(ored);
string aux = "";
while (sstream.good())
{
bitset<8> bits;
sstream >> bits;
char c = char(bits.to_ulong());
aux += c;
}
cout << "the ored string is: " << aux << endl;
}
我不知道出了什么问题。我的意思是,它可能是一种“"overflow"”,但是
它只是没有任何意义。
我该如何进行?
(抱歉我的英语不好,这是我第一次在这里开帖,我有点不确定如何移动到这里)
如果您的结果不在 0x41 到 0x5A 范围内,您将不会得到按字母顺序排列的结果:
Link to the ascii table site
我陷入了这个问题。
我正在编写一个 C++ 程序,其中:
1- 你写了一个 6 个字符的字符串
2- 该字符串被转换为位(我们称之为 'A')
3- 这串位被复制到另一个字符串中并通过 reverse() 方法还原(我们称之为 'B')
4-在A和B之间执行按位或(我们称此结果为'C')
5-(这是我被卡住的地方)C 应该转换成 ASCII...但我不是。我得到输出奇怪的 symbols/question 标记。
代码如下:
#include <iostream>
#include <bitset>
#include <sstream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
// PART ONE: from string to bits
string input;
cout << "Insert the 6 letters string you want to convert: \n";
do
{
getline(cin, input);
if (input.length() < 6 || input.length() > 6)
{
cout << "\nIt must be 6 letters!\n";
}
} while (input.length() != 6);
string inbits;
bitset<8> newbits;
for (size_t i = 0; i < input.size(); ++i)
{
newbits = bitset<8>(input.c_str()[i]);
string aux = newbits.to_string<char, std::string::traits_type, std::string::allocator_type>();
inbits.append(aux);
}
cout << endl << inbits << endl;
// PART TWO: bitwise or
string inverted = inbits;
reverse(inverted.begin(), inverted.end());
bitset<48> bstr1(inbits), bstr2(inverted), finale;
finale = bstr1 | bstr2; // here it is done the bitwise OR
cout << finale << endl;
string ored = finale.to_string<char, std::string::traits_type, std::string::allocator_type>();
// PART THREE: from bits to string of char
stringstream sstream(ored);
string aux = "";
while (sstream.good())
{
bitset<8> bits;
sstream >> bits;
char c = char(bits.to_ulong());
aux += c;
}
cout << "the ored string is: " << aux << endl;
}
我不知道出了什么问题。我的意思是,它可能是一种“"overflow"”,但是 它只是没有任何意义。 我该如何进行?
(抱歉我的英语不好,这是我第一次在这里开帖,我有点不确定如何移动到这里)
如果您的结果不在 0x41 到 0x5A 范围内,您将不会得到按字母顺序排列的结果: Link to the ascii table site