ビッグエンディアンがいけないのか、関係ないのか分からんが
しょっぱなの'FORM'を'MROF'とかやっても無理だった。
しかたがないので各チャンクの頭に飛べるよう以下みたいな、
4バイト一致するデータへのアドレスを取得する関数を書いて、自分でreadしてテストしてみたところうまく読み込めた。
高速化とかはしてない。変数名は自分でもどうかと思うがテストだったからつい。
最初はstrstr()を使おうとしたんだけどバイナリに0があったら終わるということ失念してたよ……。
char* memSearch( char* buf, int bufSize, DWORD bin )
{
const int n = bufSize - sizeof(bin);
for (int i=0; i<n; ++i)
{
DWORD now = static_cast(buf[0]) |
static_cast(buf[1])>>8 |
static_cast(buf[2])>>16 |
static_cast(buf[3])>>24;
if ( now == bin ) return buf;
buf++;
}
return NULL;
}
これで各チャンクのデータは取れるようになったはずなので、
バイトオーダーと80bit浮動小数点数をどうにかすれば読み込み可能になるかも。
CommonChunkが18Byteとサイズが半端でちょっとひっかかった。
構造体にすると20Byteに肥大化する。
0 件のコメント:
コメントを投稿