繁体   English   中英

如何将包含数字的文本文件转换为二进制文件?

[英]How can I convert a text file with numbers in it into a binary file?

所以我创建了一个使用ifstream打开文本文件的程序。 现在我想让它以二进制形式输出这个文件。 我尝试过ofstream并使用.write(),但是当我执行程序崩溃时。 当我在网上看到使用.write()时,我正确设置了它,但我没有看到有人用我正在使用的东西做。 有人有解决方案吗? 另外,我不知道为什么'InputFile'和'OutputFile'都是这样突出显示的蓝色。

#include <iostream>
#include <fstream>
#include <string>
#include <bitset>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main(int argc, char* argv[])
{
    if (argc < 2)
    {
        cout << "Error 1";
        return 0;
    }
    else
    {
        int WIDTH, HEIGHT;
        ifstream InputFile;
        InputFile.open(argv[1], ios::in);
        ofstream OutputFile;
        OutputFile.open("OUTPUT.raw", ios::binary | ios::app);
        cout << "Enter Width" << endl;
        WIDTH = cin.get();
        HEIGHT = WIDTH;
        for (int x = 0; x < WIDTH; x++)
        {
            for (int y = 0; y < HEIGHT; y++)
            {
                OutputFile.write((char*)InputFile.get(), sizeof(InputFile));
            }
        }
    }
    //cout << bitset<8>(txt[i]);
    return 0;
};
OutputFile.write((char*)InputFile.get(), sizeof(InputFile));

首先, istream::get()从流中提取一个字符,并将其值返回到整数。 结果是临时的,你将其转换为指向char的指针! 它编译,因为C风格的演员基本上告诉编译器“shoosh,我知道我在做什么!”,但它肯定会在运行时做奇怪的事情。 您需要获取某个对象的地址,其中存储您要写入的值,并转换该地址。

第二件事, sizeof(InputFile)返回管理文件流的ifstream类的大小。 它与流缓冲区中的数据量无关。

如果以文本模式打开流,则从中提取数据的正确方法是使用提取运算符( >> )。 然后它很简单:

std::ifstream in_file("numbers.txt");
std::ofstream out_file("numbers.bin", std::ios::binary);

int i;

while (in_file >> i)
    out_file.write(reinterpret_cast<char*>(&i), sizeof(int));

上面的代码片段将使用如下输入文本文件: -4 21 1990 5425342 -3432 0 100

您必须解析文本文件以获取文件中每个字符串的int ,然后创建一个新文件并使用fputc()fwrite()函数编写二进制数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM