1

私はファイルローダーで作業していましたが、fread を使用し続けるよりも次の更新に適していると判断し、fseek を使用してホールファイルを BYTE バッファーに読み取りました。この BYTE バッファーの一部を構造体に変換します。

構造体と同じサイズの一時バッファを作成し、元のバッファから必要なバイトをすべてコピーし、memcpy を使用しようとしましたが、正しく機能しませんでした。大量の乱数を受け取っただけです (私は彼らのポインターを受け取っていると思いますが、正しくわかりません)。

お時間をいただきありがとうございます!

編集:REALコード

void memread(BYTE from[],int pos, void * to,size_t size) 
{   
    BYTE * temp = new BYTE[sizeof(BYTE)*size];

    for (unsigned int i = 0; i< 1+size; i++)
        temp[i] = from[i+pos];

    memcpy(to,temp,size);

}


... inside the file loader ...


fseek(fl,0,SEEK_END);
const int memory_size = (int)ftell(fl);


BYTE * memory = new BYTE[sizeof(BYTE)*memory_size];
fseek(fl,0,SEEK_SET);

for (int i=1;i<=memory_size;i++)
fread(&memory[i],sizeof(BYTE),1,fl);

fclose(fl);

int memory_pos = 0;

XM::Memory xm;
memset(&xm,0,sizeof(XM::Memory));


memread(memory,1,&xm.Header,sizeof(XM::Header));
4

1 に答える 1

0

まず、ファイルをバイト単位で読み取っています。これにより、パフォーマンスが低下します。次に、あなたのmemread(一時バッファを解放しない場合!)を単純なものに置き換えることができますmemcpy

fseek(fl, 0, SEEK_END); 
const int memory_size = (int)ftell(fl); 

BYTE* memory = new BYTE[sizeof(BYTE) * memory_size];
fseek(fl, 0, SEEK_SET); 

fread(memory, sizeof(BYTE), memory_size, fl); 

fclose(fl); 

int memory_pos = 0; 

XM::Memory xm;
memset(&xm, 0, sizeof(XM::Memory)); 

memcpy(&xm.Header, memory + memory_pos, sizeof(XM::Header);

delete[]のような割り当てられた配列を決して忘れないでくださいtempmemory

于 2012-07-25T18:21:38.800 に答える