2011-09-28 76 views
2

我會如何處理seekp的輸入並將其與hex一起使用?像這樣? Cin >> hex >> mychar;輸入fstream :: seekp和fstream :: put

如何在十六進制中打印正確的值? 說在0x16字節是FF或255無符號的8位(小數?)當我這樣做

fstream mystream; 
mystream.seekp(0x16); 
long myvar; 
myvar=mystream.tellp(); 
cout<<"Value at offset 0x16: "<<myvar; 

它打印22 IM,因爲我以二進制方式打開該文件假設這就是爲什麼它打印22 FF值在二進制是像2222222等

是否有一個正確的數據類型打印在一定的偏移值(我試過很長的字符和整數,但仍然產量22.)或者我打印他們錯了?我搜索谷歌,但無法找到這方面的幫助,但我注意到,打開二進制文件建議用十六進制編輯。

+0

試試這個代碼。 – adatapost

+0

能否詳細說明一下?所以我使用seekg設置偏移量? seekp是我一直在使用的seekg更適合?我如何設置它與cin.get()?像unsigned short myvar = cin.get();那麼就輸入十六進制? – Aquertu

回答

1

有幾個與你的代碼的問題:

  • ostream::seekp設置「放」指針,即在哪一個寫入數據,而不是在哪一個讀取數據的位置的位置。使用istream::seekg來設置「get」指針
  • ostream::tellp不執行任何I/O。它只是報告'put'指針的值,它實際上並不提取存儲在那裏的數據。你的意思是使用istream::get

您的程序正在打印十進制數22,它等於十六進制數0x16。這是因爲seekp將put指針設置爲0x16,並且tellp僅報告put指針的值 - 0x16!如果你想讀的是字節然後設置使用seekg(0x16)偏移和使用V = cin.get()方法讀取它

fstream mystream; 
mystream.seekg(0x16); 
int myvar; 
myvar=mystream.get(); 
cout<<"Value at offset 0x16: "<<myvar << "\n"; 
+0

感謝隊友:嘿嘿,我有點忘了這些錯誤。 – Aquertu