gpt4 book ai didi

c++ - 为 fstream::seekp 和 fstream::put 获取输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:18 26 4
gpt4 key购买 nike

我将如何为 seekp 获取输入并将其用于 hex?是这样的吗? Cin>>hex>>mychar;

如何打印正确的十六进制值?说在 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 等。

是否有正确的数据类型用于在某个偏移量处打印值(我试过 long 和 char 和 int 但它仍然产生 22。)还是我打印错了?我在谷歌上搜索过,但在这方面找不到任何帮助,但我确实注意到建议以二进制打开文件以使用十六进制进行编辑。

最佳答案

您的代码有几个问题:

  • ostream::seekp 设置“put”指针,即写入数据的位置,而不是读取数据的位置。使用 istream::seekg 设置“get”指针
  • ostream::tellp 不执行任何 I/O。它只是报告“put”指针的值,实际上并不获取存储在那里的数据。你的意思是使用 istream::get

您的程序正在打印十进制数 22,它等于十六进制数 0x16。这是因为 seekp 将 put 指针设置为 0x16,而 tellp 仅报告 put 指针的值 -- 0x16!

试试这段代码:

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

关于c++ - 为 fstream::seekp 和 fstream::put 获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com