2011-09-14 10 views
1

次のコードでは、ファイルをseekpする位置を計算しています。tellpが間違った値を返しています

次に、その位置を印刷してみます。間違った値を返しています。私は

をseekpに渡すいた値に基づいて、代わりに値のtellp

へのすべての呼び出しについて18446744073709551615

:私は

入れポインタ位置の出力を取得しています

printf("nXBlocks: %i nYBlocks: %i posX: %i, posY: %i, blockheight: %i, blockwidth: %i \n", 
nXBlocks,nYBlocks, tilePosX, tilePosY , XBlockSize, YBlockSize); 
binfile->seekp((tilePosX*poBand->GetYSize()*XBlockSize)*sizeof(uint16_t) + (tilePosY * XBlockSize*YBlockSize)*sizeof(uint16_t)); 
size_t pos = binfile->tellp(); 
cout<<"Multiplication output: " 
    <<(tilePosX*poBand->GetYSize()*XBlockSize)*sizeof(uint16_t) + (tilePosY * XBlockSize*YBlockSize)*sizeof(uint16_t) 
    <<endl; 
cout << "Put pointer positions: " << pos << endl; 
binfile->write((char *)&sixteenBitData, sizeof(uint16_t)*bufSizeX*bufSizeY); 

編集:最初のいくつかの出力...

nXBlocks: 34 nYBlocks: 29 posX: 0, posY: 0, blockheight: 1024, blockwidth: 1024 
Multiplication output: 0 
Put pointer positions: 0 
nXBlocks: 34 nYBlocks: 29 posX: 0, posY: 1, blockheight: 1024, blockwidth: 1024 
Multiplication output: 2097152 
Put pointer positions: 18446744073709551615 
nXBlocks: 34 nYBlocks: 29 posX: 0, posY: 2, blockheight: 1024, blockwidth: 1024 
Multiplication output: 4194304 
Put pointer positions: 18446744073709551615 
+0

ファイルはバイナリとして開いていますか? –

+1

これはC++の質問ですので、std :: coutを使って印刷してください。そうすれば、印刷時に正しいタイプが得られることが保証されます。 「zu」を使用するのではなく、フォーマットを拡張するC99のようです。 –

+0

はい、バイナリです – Derek

答えて

0

seekpが明らかに失敗しています。あなたがファイルにない点を探しているようです。値を取得してみてください

binfile.bad() 
関連する問題