2013-03-23 3 views
2

현재 바이너리 코드가 포함 된 문자열을 저장하려고 시도하고 있습니다.C++, 바이너리를 포함하는 문자열을 텍스트 파일에 저장

이 문자열을 텍스트 파일에 쓰려고하면 각 0 및 1 문자가 필요한대로 8 비트 청크에 저장되는 대신 문자열 형식으로 저장됩니다. 8 비트를 사용하여 각 0과 1을 저장할 때 파일 크기가 의도 한 것보다 커집니다.

.txt 파일 대신 .bin 파일에 문자열을 써야합니까? 그렇다면이 작업을 수행하는 방법과 가능하면 작업 코드가 포함 된 예제를 작성하십시오.

미리 조언 해 주셔서 감사합니다.

string encoded = "01010101";  
    ofstream myfile; 
    myfile.open ("encoded"); 
    myfile << encoded; 
    myfile.close(); 

명확한 설명 : 는 내가 8 개 비트 덩어리들로이 문자열을 중단 할 1과 0의 (a 허프만 트리의 결과)로 구성된 문자열을 가지고, 나는 말했다 갈라진 틈으로 표시되는 각 문자를 작성하고자하는 압축 된 파일. 당신이 코드를 게재하지 않기 때문에

+0

문자열에 이진 데이터를 저장해야하는 이유가 있습니까? 바이너리 데이터를 저장하기위한 용도로 사용할 수 없습니까? – Pubby

+0

허프 먼 트리를 사용하여 텍스트 인코딩으로 인한 바이너리를 저장하려고합니다. 내가 겪고있는 문제는 8 비트 압축 방식으로 파일에 바이너리를 쓰는 것입니다. – user2202417

답변

0

.txt 파일 대신 .bin 파일에 문자열을 써야합니까?

원하는 경우 ...하지만 그렇게해도 차이는 없습니다. ofstream은 파일 이름에 신경 쓰지 않습니다. 그냥 바이트 (uint8_t)로 문자열을 변환 파일에 해당 바이트 쓰기 :

string s = "10101010"; 
uint8_t byte = strtoul(s.c_str(), NULL, 2); 
myfile << byte; 
+0

좋아요? 'string test = "01010101"; uint8_t byte = strtoul (test.c_str()); ofstream myfile3; myfile3.open ("binary.txt"); myfile3 << 테스트; myfile3.close();'@ H2CO3 – user2202417

+0

@ user2202417 예, 실수로'strtoul'의 두 개의 인수를 생략했습니다. 편집을 참조하십시오. –

1

이 난 단지 추측하고있어,하지만 당신은 문자'1''0'를 포함하는 문자열이 보인다. 물론 파일에 쓰는 경우 텍스트로 사용됩니다. 먼저 정수로 변환해야합니다.

std::stoi 또는 std::strtol은 임의의 기본 문자열을 정수로 변환하는 함수입니다.

1

std::bitset는 문자열을 정수로 변환 할 수 있습니다.

std::bitset<8> bits("01010101"); 
cout << bits.to_ullong(); 
관련 문제