Я пытаюсь преобразовать входящее sting из 1s и 0s из stdin в их соответствующие двоичные значения (где строка, такая как "11110111", будет преобразована в 0xF7). Это кажется довольно тривиальным, но я не хочу изобретать колесо, поэтому мне интересно, есть ли что-нибудь в стандартных библиотеках C/С++, которые уже могут выполнять такую операцию?
Преобразование строки из 1s и 0s в двоичное значение
Ответ 1
#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
.
Ответ 2
Вы можете использовать std:: bitset (если длина ваших битов известна во время компиляции)
Хотя с помощью какой-то программы вы можете разбить ее на куски и объединить.
#include <bitset>
#include <iostream>
int main()
{
std::bitset<5> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
}
Ответ 3
Вы можете использовать strtol
char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);
Ответ 4
Вы можете использовать динамический бикет Boost:
boost::dynamic_bitset<> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
Ответ 5
Я написал несколько функций для этого и получил лицензию под LGPL. Здесь можно найти здесь.