2013-05-26 5 views
0

나는 사용자 입력의 각 개별 문자를이 문자를 ASCII로 나타내는 데 사용되는 이진 숫자 값으로 변환하여 이진 파일로 문장을 인코딩하는 프로그램을 작성 중입니다. 문자열을 그로 변환하는 더 좋은 방법을 생각할 수 없어서 사용자 입력을 문자 배열로 저장할 수 있는지 알고 싶습니다. 예를 들어 사용자가 세계에 "Apple"이라고 입력하면 각각의 문자를 하나의 문자로 저장할 수 있습니까?사용자가 입력 한 단어를 문자 배열로 저장할 수 있습니까?

EDIT : 이진 숫자 값 1010101 등으로 단어를 변환 한 후 언급 한 것을 잊어 버렸습니다. 이진 숫자 값을 0과 1의 임의의 문자열에 넣고 화면에 표시해야합니다.

+0

문자열을 색인하기 만하면되는 것처럼 들립니다. – chris

+0

무엇을 의미합니까? – user2419691

+0

'std :: string' 또는'char []'가 작동하지 않습니까? – 0x499602D2

답변

1

여기 이진 정수 변환 처리, 내 이전 대답 : How to manipulate and represent binary numbers in C++

는 대부분의 경우, 사람들은 이러한 문자열을 한 번에 하나 개의 비트를 만들 수있는 루프를 쓸 수 있지만 그것은 운동 인에서 떨어져 (조금 무의미 비트 연산). 이것은 니블 상위 소요

std::string StringToBinary(const string & s) 
{ 
    static const char lookup[16][5] = { 
     "0000", "0001", "0010", "0011", 0100", "0101", "0110", "0111", 
     "1000", "1001", "1010", "1011", 1100", "1101", "1110", "1111" 
    }; 

    std::string bin; 
    bin.reserve(s.size()*8); 

    for(i = 0; i < s.size(); i++) { 
     bin.append(lookup[(unsigned char)s[i] >> 4], 4); 
     bin.append(lookup[(unsigned char)s[i] & 0x0f], 4); 
    } 
    return bin; 
} 

및 (s[i]>>4)과 하위 : 당신은 하나의 문자에 위의 내 대답을 적용하면 절반 바이트를 나타내는 조회 테이블을 사용하여 손으로 컴팩트하게 그것을 할 수 있습니다 nybble (s[i]&0x0f) 각각을 4 비트 문자열로 변환합니다. 원하는 경우 8 비트 룩업 테이블을 사용할 수 있지만 코드를 생성하거나 동적으로 생성하는 작은 프로그램을 작성하고자 할 수 있습니다.

위의 솔루션은 비트 연산을 많이하지 않고도 더 쉽습니다.

관련 문제