私は C++ に比較的慣れていないので、独自のファイル形式を読み込もうとしています。ヘッダー形式を知ってRTIHeader
おり、必要なフィールドを含む構造体を作成しました。
私のテスト コードは、ファイルからバイトを読み取り、それらをヘッダー構造体と同じメモリ空間にコピーして、効果的に再構成します。私の問題は、テストコードを実行するたびに (コンストラクターを呼び出すだけで)、異なる値が得られることです! 私の理論では、私は完全には理解していませんmemcpy
。
struct RTIHeader decode(char* memblock){
struct RTIHeader header;
memcpy(&header,&memblock,sizeof(RTIHeader));
return header;
}
RTIFile::RTIFile(const char* filename){
// open the file in binary input mode with the pointer at the end
std::ifstream file(filename,
std::ios::in |
std::ios::binary |
std::ios::ate);
std::ifstream::pos_type size;
char * memblock;
RTIHeader header;
// if the file didn't open, throw an error
if(!file.is_open()){
//TODO learn about C++ error handling
return;
}
// use pointer position to determine file size
size = file.tellg();
// read file
memblock = new char [sizeof(RTIHeader)];
file.seekg(0,std::ios::beg);
file.read(memblock,sizeof(RTIHeader));
header = decode(memblock);
std::cout << (unsigned int)header.signature[0] << "\n";
// still need to read the rest of the file
file.close();
}