내가 여기서 무슨 일이 있었는지std :: fstream :: tellg()는 파일 커서 포인터를 잘못 출력합니까?
char c;
cout << myFile.tellg() << endl; // Correctly outputs 0 (begining of file)
myFile.read(&c, 1);
cout << myFile.tellg() << endl; // Should output 1, but it outputs
// FFFFFFFFFFFFFFFA
myFile.read(&c, 1);
cout << myFile.tellg() << endl; // Should output 2, but it outputs
// FFFFFFFFFFFFFFFB
를 사용, 내가 첫 번째 바이트를 읽고 싶어 할 때
std::fstream myFile { "C:/path/to/file.txt" };
를 사용하여 수입하는하는 std::fstream
있나요?
midi_file.seekg(0, ios_base::beg);
또는
midi_file.seekg(0, myFile.beg);
을 퍼팅 시도하지만 바이트를 읽으려고 할 때마다 커서가
FFFFFFFFFFFFFFFA
로 이동합니다.
편집 :
이 할 수있는 뭔가가 있는지 잘 모르겠지만, 내가 엔디안 테스트를했고, 이러한 결과입니다
bool endianness = *reinterpret_cast<short*>("10") & 1; // Outputs 1
편집 2 :
다른 파일과 출력이 다르지만 그 이유는 무엇입니까?
4D 54 68 64 00 00 00 06 00 01 00 03 00 04 4D 54
72 6B 00 00 00 A1 00 C0 69 00 90 3C 5A 01 41 5A
01 45 5A 01 48 5A 01 49 5A 01 48 5A 01 45 5A 01
41 5A 01 3C 5A 01 37 5A 01 33 5A 01 30 5A 01 30
5A 01 30 5A 01 33 5A 01 37 5A 01 3C 5A 01 41 5A
01 45 5A 01 48 5A 01 49 5A 01 48 5A 01 45 5A 01
41 5A 01 3C 5A 01 37 5A 01 33 5A 01 30 5A 01 30
5A 01 30 5A 01 33 5A 01 37 5A 01 3C 5A 01 41 5A
01 45 5A 01 48 5A 01 49 5A 01 48 5A 01 45 5A 01
41 5A 01 3C 5A 01 37 5A 01 33 5A 01 30 5A 01 30
5A 01 30 5A 01 33 5A 01 37 5A 01 3C 5A 01 41 5A
01 45 00 00 FF 2F 00 4D 54 72 6B 00 00 00 41 00
C1 72 05 91 3C 5A 00 40 5A 00 43 5A 00 48 5A 0A
35 5A 00 41 5A 00 44 5A 00 49 5A 0A 37 5A 00 40
5A 00 43 5A 00 48 5A 0A 41 5A 00 47 5A 0A 30 5A
00 40 5A 00 43 5A 00 48 5A 05 32 00 00 FF 2F 00
4D 54 72 6B 00 00 00 26 00 C2 47 0A 92 50 64 01
52 64 09 50 78 00 52 78 0A 50 00 01 52 00 09 50
78 01 50 00 0A 52 00 00 50 00 00 FF 2F 00
EDIT 3 : 여기
이 테스트의 전체 코드 :
여기 는.midi
파일 HxD 찍은 파일의 바이트 데이터이다
#include <fstream>
#include <iostream>
int main() {
cout << std::hex << std::setfill('0') << std::uppercase;
fstream midi_file{ "D:/Descargas/OutFile.midi" };
cout << midi_file.good() << endl; // Outputs 1
char c;
cout << midi_file.tellg() << endl; // Correctly outputs 0 (begining of file)
midi_file.read(&c, 1);
cout << midi_file.tellg() << endl; // Erroneously outputs FFFFFFFFFFFFFFFA
midi_file.read(&c, 1);
cout << midi_file.tellg() << endl; // Erroneously outputs FFFFFFFFFFFFFFFB
// Endianness test:
cout << (*reinterpret_cast<short*>("10") & 1) << endl; // Outputs 1
return 0;
}
읽기 전과 후에 모두 'myFile' 상태가 양호합니까? – Angew
@Angew 흠, myFile.badbit은 4를 반환하고 myFile.failbit은 2를 반환합니다. 그러나 myFile.bad()와 myFile.fail()은 모두'0'을 반환합니다. – Garmekain
'std :: fstream'을 구성 할 때 중괄호'{}'가 오타라고 가정합니다. '()'이어야합니다. 그것도'{}'로 컴파일합니까? – freakish