개별 비트 값을 얻기 위해 바이너리 파일을 읽으려고합니다. 다음 기능을 사용하고 있습니다.
string readFileBytes(const char *name)
{
ifstream fl(name);
fl.seekg( 0, ios::end );
size_t len = fl.tellg();
char *ret = new char[len+1];
fl.seekg(0, ios::beg);
fl.read(ret, len);
fl.close();
ret[len] = '\0';
return ret;
delete ret;
}
이것은 잘 작동합니다. 다음 부분에서는 배열의 각 요소 ret
를 가져 와서 개별 비트 값을 얻기 위해 작성한 다음 함수를 사용합니다.
string out;
for (int i=0; i < len; i++)
{
for (int x =7; x >=0; x--)
{
out += ((ret[i]>>x) & 0x01);
}
}
cout << ((ret[i]>>x) & 0x01);
대신 중첩 루프 내에 있으면 비트 값이 완벽하게 인쇄됩니다. 하지만있는 그대로 가지고 문자열 ( out
)을 인쇄하면 웃는 얼굴 만 나타납니다.
이유는 무엇입니까?
표현식
((ret[i]>>x) & 0x01)
정수 0
또는 1
(즉, 0
또는의 숫자 값 1
)로 평가됩니다. 0
및을 나타내는 문자가 필요합니다 1
. 시험
out += '0' + ((ret[i]>>x) & 0x01);
관련 : int를 ASCII 문자로 변환
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다