저는 C++로 읽기를 원합니다. 내가 읽고 확인해야 할 첫 번째 것은 파일의 매직 넘버입니다. 0xABCDEF00C++는 파일에서 매직 넘버를 읽고 비교합니다.
내가 읽고 숫자 이런 식으로 비교: 내 경우에는 그것은 진수-값입니다
ifstream input ("C:/Desktop/myfile", ios::binary);
if (input.is_open()) {
input.seekg(0, ios::beg);
unsigned char magic[4] = {0};
input.read((char*)magic, sizeof(magic));
if(magic[0] == 0xAB &&
magic[1] == 0xCD &&
magic[2] == 0xEF &&
magic[3] == 0x00) {
cout << "It's my File!" << endl;
} else {
cout << "Unknown File!" << endl;
}
}
이 아주 잘 작동을하지만, 전체 읽기 문자를 비교하는 방법은 무엇입니까 [] - 한 번에 배열? 이 방법처럼 :
unsigned int magicNumber = 0xABCDEF00;
... same code for reading file as above ...
Instead of checking each Array-Entry a way like this:
if(magic == magicNumber) {
do something ...
}
같은 방법이 있는지 알고있는 것이 좋을 것이다 - 그렇지 않으면 덕분에 당신은 당신의 플랫폼의 엔디 언을 알고 있다면 그런 방법 :
memcpy를 사용하여 char 배열의 내용을 부호없는 int로 복사 할 수 있습니다. 'memcpy (& anUnsignedInt, magic, sizeof (unsigned int)); ' – Christoph
마법의 숫자가'long' 범위입니까? 그런 다음'std :: stol' 또는 익숙한 ('long'을'int','stoll'은'stoi', 부호없는 것은'i' /'l' /'ll' 앞에'u'를 추가하십시오.) ... –
이진 파일에서 작동하지 않을 경우, @LapshinDmitry – user4581301