使用hex保存输出会增加空格吗?

时间:2016-01-28 11:01:53

标签: c++ hex

我有这段代码

int main()
{
ifstream fin;
ofstream fout;

string filename = "X64-MK10Game.ini";

fin.open(filename.c_str(),ios::binary);
fin>>noskipws;
fout.open("MODDED.ini");

unsigned char x;

while(fin>>x)
{
    fout<<x;
}

return 0;
}

这段代码的含义是文件是这样的:

[MAIN]
Options

我得到的输出是

[MAIN]

Options

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

问题是您在二进制模式下阅读fin,但在文字模式下写fout

在二进制模式下,不会重新解释行尾字符。在Windows上的文本模式下,读取对\r\n仅返回字符\n,并且写入字符\n会导致\r\n写入输出流。< / p>

因此,由于fin以二进制方式打开,您将获得字符\r\n。由于fout在文本中打开,因此将\r写入其中会生成\r,然后将\n写入其中会生成\r\n,从而复制回车符。

解决方案是以二进制模式打开fout。由于您显然对二进制I / O感兴趣,因此您可能希望使用未经调整的I / O函数read()write()而不是>><<操纵器,用于格式化 I / O.