문제
stdin에서 들어오는 1과 0의 문자열을 각각의 이진 값("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 Dynamic Bitset을 사용할 수 있습니다.
boost::dynamic_bitset<> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
나는 이를 위해 몇 가지 기능을 작성했으며 LGPL에 따라 라이센스를 받았습니다.찾을수있다 여기.
제휴하지 않습니다 StackOverflow