символа в двоичное преобразование в C++ два символа за раз, чтобы получить 16-битную двоичную форму

Вопрос: Привет, я хочу преобразовать два символа за раз в строку в двоичный файл? как я могу это сделать, применяя простую арифметику (т.е. делая свою собственную функцию?) Например: наша строка = hello world: Желаемый вывод (по два символа за раз): he // need binaryform of 0 and 1 (16 bits for 2 characters 'h' and

Вопрос:

Привет, я хочу преобразовать два символа за раз в строку в двоичный файл? как я могу это сделать, применяя простую арифметику (т.е. делая свою собственную функцию?)

Например: наша строка = hello world:

Желаемый вывод (по два символа за раз):

he // need binaryform of 0 and 1 (16 bits for 2 characters ‘h’ and ‘e’ ll // similarly o(space) // single space also counts as a character with 8 zero bit in binary. wo rl d(space) // space equals a character again with 8 zero bits

как с этим справиться. Я не хочу никакого ascii между ними. от персонажа до двоичного… это возможно?

Лучший ответ:

Если вы ищете способ текстового представления двоичного представления символов, то вот небольшой пример того, как вы можете это сделать:

Небольшая функция, которая выводит двоичное представление c в std::cout (будет работать только для стандартных букв ASCII):

void printBinary(char c) { for (int i = 7; i >= 0; —i) { std::cout << ((c & (1 << i))? ‘1’ : ‘0’); } }

Используйте его так (распечатайте только пары символов):

std::string s = «hello «; // Some string. for (int i = 0; i < s.size(); i += 2) { printBinary(s[i]); std::cout << » — «; printBinary(s[i + 1]); std::cout << » — «; }

Выходы:

01101000 — 01100101 — 01101100 — 01101100 — 01101111 — 00100000 —

Редактировать:

На самом деле, используя std::bitset это все, что нужно:

std::string s = «hello «; // Some string. for (int i = 0; i < s.size(); i += 2) { std::cout << std::bitset<8>(s[i]) << » «; std::cout << std::bitset<8>(s[i + 1]) << » «; }

Выходы:

01101000 01100101 01101100 01101100 01101111 00100000

Если вы хотите сохранить двоичные числа пар символов в std::vector, как указано в комментарии, то это сделает это:

std::vector<std::string> bitvec; std::string bits; for (int i = 0; i < s.size(); i += 2) { bits = std::bitset<8>(s[i]).to_string() + std::bitset<8>(s[i + 1]).to_string(); bitvec.push_back(bits); } Ответ №1

Это может быть достигнуто быстро и легко, используя BITSET класс в C++ STL.

Ниже приведена функция, которую вы можете использовать:

#include <string> #include <bitset> string two_char_to_binary(string s) // s is a string of 2 characters of the input string { bitset<8> a (s[0]); // bitset constructors only take integers or string that consists of 1s and 0s e.g. «00110011» bitset<8> b (s[1]); // The number 8 represents the bit depth bitset<16> ans (a.to_string() + b.to_string()); // We take advantage of the bitset constructor that takes a string of 1s and 0s and the concatenation operator of the C++ string class return ans.to_string(); }

Пример использования:

using namespace std; int main(int argc, char** argv) { string s = «hello world»; if(s.length() % 2 != 0) // Ensure string is even in length s += » «; for(int i=0; i<s.length(); i += 2) { cout << two_char_to_binary(s.substr(i, 2)) << endl; } return 0; } Ответ №2

Я думаю, что вещь, которую вы ищете, – это кастинг. Попробуйте вот так:

char *string = «hello world «; short *tab = (short*)string; for(int i = 0; i < 6; i++) std::cout << tab[i] << std::endl;

Оцените статью
Добавить комментарий