首页 > 解决方案 > 我用 C++ 编写的 ascii 到二进制转换器显示二进制向后,我怎样才能让它正确显示?

问题描述

好的,所以我用 C++ 编写了一个 ascii 到二进制转换器,一切都很好,唯一的问题是它向后显示二进制文件,我不知道如何正确显示它。

#include <iostream>
#include <string>

using namespace std;

int main() {
    string word;
    getline(cin, word);

    for (int i = 0; word[i] != '\0'; i++) {
        int v = int(word[i]);
        while (v != 1 || 0) {
            int m = v % 2;
            cout << " " << m << " ";
            v = v / 2;
        }
        cout << " " << v;
    }
    return 0;
}

这就是我的意思。当我运行代码时,它要求您输入 ascii,所以我输入:

 f

这是十进制的 102,因此它应该显示:

 1100110

相反,我得到:

 0110011

我该怎么办?

标签: c++stringbinarydecimalascii

解决方案


在下面的代码中,位掩码用于隔离位。然后打印位的文本形式。然后位掩码在适当的方向上旋转。

const size_t length = word.length();
for (size_t i = 0; i < length; ++i)
{
    char bit_mask = 0x80;
    const char value(word[i]);
    for (size_t bit_count = 0; bit_count < 8; ++bit_count)
    {
       char bit_value = value & bit_mask;
       if (bit_value)
       {
          std::cout << '1';
       }
       else
       {
          std::cout << '0';
       }
       bit_mask >>= 1;
    } 
    std::cout << ' ';
}

上面的代码以最高有效位格式打印位。要更改位顺序,请更改 的初始值并向左 bit_mask旋转。bit_mask


推荐阅读