나는 이것을 이해하려고 벽에 머리를 부딪혔다. 온라인에서 아무것도 찾지 못했기 때문에 누군가가 나를 깨달을 수 있도록 여기에서 공유하고 있습니다.
#include <iostream>
#include <fstream>
int main(){
std::ifstream in("bf", std::ios::binary);
if (!in)
return false;
unsigned char byte;
while (!in.eof()){
in >> byte;
if (in.fail()){
break;
}
std::cout<<(int)byte<<std::endl;
}
}
"bf"가이 파이썬 스크립트에 의해 생성 된 파일 인 위 코드를 실행합니다.
f = open('bf','wb')
arr = bytearray([i for i in range(20)])
f.write(arr)
f.close()
다음 출력을 생성합니다.
0
1
2
3
4
5
6
7
8
14
15
16
17
18
19
Ubuntu 18.04를 실행하고 있습니다. 누구든지 그 행동을 복제 할 수 있습니까? 무슨 일이 일어나고 있는지 아는 사람이 있습니까?
Python 스크립트는 내용이 바이트 0..19 인 바이너리 파일을 생성합니다. 그러면 C ++ 코드가 해당 파일을 이진 모드로 읽고 읽은 바이트의 숫자 값을 출력합니다. 문제는 당신이 기대하는 것을 읽지 않는다는 것입니다.
C ++ 코드에는 두 가지 문제가 있습니다.
당신은 eof()
잘못 사용하고 있습니다.
operator>>
이 상황에서 원하는 것이 아닌 형식화 된 읽기를 수행합니다 . operator>>
공백을 무시하고 9..13 바이트는 공백 문자를 나타내므로 출력되는 것을 볼 수 없습니다. 대신 steam의 방법 과 같이 형식화되지 않은 읽기 가 필요합니다.get()
이 시도:
#include <iostream>
#include <fstream>
int main(){
std::ifstream in("bf", std::ios::binary);
if (!in)
return false;
char byte;
while (in.get(byte)){
std::cout << (unsigned int)byte << std::endl;
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다