мой конвертер ascii в бинарный код, который я написал на C ++, отображает бинарный код в обратном порядке, как мне сделать так, чтобы он отображался правильно? - PullRequest
0 голосов
/ 27 сентября 2018

Хорошо, поэтому я написал преобразователь ascii в двоичный файл в C ++, все отлично, единственная проблема заключается в том, что он отображает двоичный файл в обратном направлении, я не знаю, как это сделать и отобразить его правильно.

#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

Что мне делать?

1 Ответ

0 голосов
/ 27 сентября 2018

В следующем коде для выделения бита используется битовая маска .Затем печатается текстовая форма бита.Затем битовая маска поворачивается в соответствующем направлении.

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 влево.

...