2011-09-28 93 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