gpt4 book ai didi

c++ - 二进制文件 I/O 问题

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

编辑:我正在尝试将文本文件转换为字节。我不确定代码是否将其转换为字节。这是 header 的链接,因此您可以看到 as_bytes 函数。

link

#include "std_lib_facilities.h"

int main()
{
cout << "Enter input file name.\n";
string file;
cin >> file;
ifstream in(file.c_str(), ios::binary);

int i;
vector<int> bin;

while(in.read(as_bytes(i), sizeof(int)))
bin.push_back(i);

ofstream out(file.c_str(), ios::out);

for(int i = 0; i < bin.size(); ++i)
out << bin[i];

keep_window_open();
}

请注意,现在输出流只输出 vector 的内容。它不使用写函数或二进制模式。这会将文件转换为一大行数字 - 这就是我要查找的内容吗?

这里是第二个代码的文件转换的例子:

that guy likes to eat lots of pie (not sure if this was exact text)

转向

543518319544825700191924850016351970295432362115448292821701667182186922608417526375411952522351186935715718643976841768956006

最佳答案

第一种方法没有更改文件的原因是所有文件都以相同的方式存储。文本文件和二进制文件之间唯一的“区别”是文本文件只包含可以显示为 ASCII 字符的字节,而二进制文件* 具有更随机的字节种类和顺序。所以你正在以字节的形式读取字节,然后再次以字节的形式输出它们!

*我将 Unicode 文本文件包括为二进制文件,因为它们可以有多个字节来表示一个字符点,具体取决于字符点和使用的编码。

第二种方法也很简单。您像以前一样读取字节,并将它们存储为整数(可能有 4 个字节长)。然后你只是打印出整数,就好像它们是整数一样,所以你看到的是一串数字。

至于为什么你的第一个方法会截断一些字节,你是对的,因为它可能是你代码中的一些错误。我认为更重要的是解释这种情况下的想法,而不是调试一些测试代码。

关于c++ - 二进制文件 I/O 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197858/

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