Как преобразовать шестнадцатеричные числа в двоичные в С++?
Я беру начальный класс С++ и хочу конвертировать буквы между шестнадцатеричными представлениями и двоичными. Я могу распечатать шестнадцатеричные числа, используя:
for(char c = 'a'; c <= 'z'; c++){
cout << hex << (int)c;
}
Но я не могу сделать то же самое для двоичного кода. Нет std::bin
, который я могу использовать для преобразования десятичных чисел в двоичный.
Ответы
Ответ 1
Так же:
for(char c = 'a'; c <= 'z'; c++){
std::bitset<sizeof(char) * CHAR_BIT> binary(c); //sizeof() returns bytes, not bits!
std::cout << "Letter: " << c << "\t";
std::cout << "Hex: " << std::hex << (int)c << "\t";
std::cout << "Binary: " << binary << std::endl;
}
Ответ 2
В С++ нет бинарного io-манипулятора. Вам нужно выполнить рутину вручную, возможно, используя операторы бит-сдвига. Фактическое преобразование не является сложной задачей, поэтому должно быть в пределах возможностей новичка на С++ (тогда как тот факт, что он не включен в стандартную библиотеку, может быть не следующим:))
Изменить: многие другие придумали примеры, поэтому я дам свой предпочтительный метод
void OutputBinary(std::ostream& out, char character)
{
for (int i = sizeof(character) - 1; i >= 0; --i)
{
out << (character >> i) & 1;
}
}
Это также может быть потенциально шаблонным для любого числового типа.
Ответ 3
Для бит разнообразия вы также можете сделать это, используя таблицу поиска из 16 элементов.
Ответ 4
Вы можете легко написать сопоставление между шестнадцатеричными charachters и их двоичными "nibbles":
std::string HexCharToNibble( char c ) {
switch (c) {
case '0': return "0000";
case '1': return "0001";
//... fill in the rest
case 'f': return "1111";
default: assert(false); return "bad input";
};
Ответ 5
Вы можете сделать что-то вроде этого:
for(char c = 'a'; c <= 'z'; c++){
// char is 8 bits. print 4 bits
// at a time, starting with the MSB
for (int i = 4; i>=0; i-=4) {
switch (((int)c >> i) & 0xf) {
case 0:
cout << "0000";
break;
case 1:
cout << "0001";
break;
.
.
.
case 0xf:
cout << "1111";
break;
}
}
}
Ответ 6
Это звучит как задание, и в этом случае вы действительно должны попросить своего учителя о помощи. Вымогательство решений домашней работы из Интернета на самом деле не поможет вам в долгосрочной перспективе (если вы не идете в управление проектами).
Отвечая chustar (OQ'er) в комментариях, я должен согласиться, что, если вы поймете, как это сделать, как/почему это работает, и как понять это в будущем, тогда да, это было бы хорошо.
Однако ответ, который он назвал "правильным", ставит ложь в этот аргумент. Он содержит только код, предваряемый словами "Like so". Довольно ясно, что то, что искал OQ'er, было не для объяснения, а для того, чтобы кто-то написал для него свой код.