2011-09-14 36 views
1

在下面的剪輯中,我正在計算文件的位置以查找,以便寫入。tellp正在返回錯誤的值

然後我嘗試打印那個位置。它返回一個不正確的值;

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); 

我得到的

置入指針位置的輸出:基於我傳遞給seekp

值18446744073709551615

對於每次調用tellp

相反值

編輯:一些輸出的前幾...

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()