Преобразование строки из 1 и 0 в двоичное значение

StackOverflow https://stackoverflow.com/questions/117844

  •  02-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь преобразовать входящее значение 1s и 0s из stdin в их соответствующие двоичные значения (где строка, такая как "11110111", будет преобразована в 0xF7).Это кажется довольно тривиальным, но я не хочу изобретать велосипед, поэтому мне интересно, есть ли что-нибудь в стандартных библиотеках C / C ++, которые уже могут выполнять такую операцию?

Это было полезно?

Решение

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char * ptr;
    long parsed = strtol("11110111", & ptr, 2);
    printf("%lX\n", parsed);
    return EXIT_SUCCESS;
}

Для больших чисел в качестве long long версия, strtoll.

Другие советы

Вы можете использовать std::bitset (если длина ваших битов известна во время компиляции).
Хотя с помощью какой-нибудь программы вы могли бы разбить его на куски и объединить.

#include <bitset>
#include <iostream>

int main()
{
    std::bitset<5>  x(std::string("01011"));

    std::cout << x << ":" << x.to_ulong() << std::endl;
}

Вы можете использовать strtol

char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);

Вы можете использовать Динамический набор битов Boost:

boost::dynamic_bitset<>  x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;

Я написал для этого несколько функций и лицензировал их под лицензией LGPL.Можно найти здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top