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

标签 c++ binary

编辑:我正在尝试将文本文件转换为字节。我不确定代码是否将其转换为字节。这是 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/

相关文章:

c++ - 构造 vector C++ 后无法释放指针

c++ - 用 boost.python 包装一个模板函数

c++ - 了解 logb() 的工作原理

c++ - 将 2 字节数分成两个 1 字节

ios - iOS-拒绝二进制后是否需要重新提交应用内购买

c - 有符号整数加法,需要说明

c# - 将一段代码从 C++ 转换为 C#

c++ - 使用 SFML 在第二台显示器上打开全屏窗口?

c# - 反序列化错误: End of Stream encountered before parsing was completed

C 在内存中写入位