Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将包含数字的文本文件转换为二进制文件?_C++_Windows_Binary_Iostream_Fstream - Fatal编程技术网

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

C++ 如何将包含数字的文本文件转换为二进制文件?,c++,windows,binary,iostream,fstream,C++,Windows,Binary,Iostream,Fstream,所以我制作了一个程序,用ifstream打开一个文本文件。现在我想让它以二进制输出这个文件。我尝试过使用流和.write(),但当我这样做时,程序崩溃了。正如我在网上看到的那样,我在使用.write()时正确地设置了它,但我还没有看到有人用我正在使用的东西来设置它。有人能解决这个问题吗?另外,我也不知道为什么“InputFile”和“OutputFile”都是蓝色高亮显示的 #include <iostream> #include <fstream> #include &

所以我制作了一个程序,用ifstream打开一个文本文件。现在我想让它以二进制输出这个文件。我尝试过使用流和.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;
};
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
如果(argc<2)
{

cout您必须解析文本文件,以获得文件中每个字符串的
int
,只需创建一个新文件并使用
fputc()
fwrite()
函数写入二进制数据

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));
std::ifstream在_文件(“numbers.txt”)中;
std::ofstreamout_文件(“numbers.bin”,std::ios::binary);
int i;
而(在_文件>>i中)
out_file.write(reinterpret_cast&i),sizeof(int));

上面的代码片段将与这样的输入文本文件一起工作:
-4 21 1990 5425342-3432 0 100

我们需要更多信息。您是如何设置的?它是如何崩溃的?在哪里崩溃的?如果您显示失败的代码,我们可能会提供帮助。您是否使用了
ios::out | ios::binary
标志?向我们显示一些代码。是否可以显示使用代码你试过了吗?如果你也展示一个示例输入文件,那就太好了。到目前为止,你是最接近的,但问题是我的文件在数字中没有任何空格。当我把一个像你这样有拆分数字的文件放进去时,它工作了,但是当我把我的文件放进一个大数字时,由于某种原因它就不工作了。我会把输入文件给你看,但是在这个网站上输入的字符太多了。它几乎只是一个有着很大数字的文件。如果你想表示那个“大数字”作为一个整数,那么问题就不那么简单了。你需要一个可以处理非常大的整数的库。你想实现什么?如果你只想拥有一个具有相同信息但较小大小的文件版本,你可以尝试压缩它。你可以使用现有的压缩算法,或者,如果你的输入文件具有特定的如果你的特征不能被利用,你可以自己发明一些东西。