문제

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에 따라 라이센스를 받았습니다.찾을수있다 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top