Text .txt转换为二进制c++;,与int有关的问题

Text .txt转换为二进制c++;,与int有关的问题,text,binary,int,Text,Binary,Int,我有一个文本文件,我正在转换为二进制文件。它是一个7位数的数字,后面跟着一个名字,然后重复,不管列出多少名字 1234567 First Last 7654321 First Last 因为它是一个7位数的int,所以我很难用int结构的这个方法将它输出到二进制文件。它给了我一个非常大的.DAT(二进制)文件,每当我写它,甚至说只有3个名字。有没有更好的方法输出它,使我的二进制.dat文件看起来大约200kb,而不在20mb+范围内 const int MAX = 50; struct St

我有一个文本文件,我正在转换为二进制文件。它是一个7位数的数字,后面跟着一个名字,然后重复,不管列出多少名字

1234567 First Last
7654321 First Last
因为它是一个7位数的int,所以我很难用int结构的这个方法将它输出到二进制文件。它给了我一个非常大的.DAT(二进制)文件,每当我写它,甚至说只有3个名字。有没有更好的方法输出它,使我的二进制.dat文件看起来大约200kb,而不在20mb+范围内

const int MAX = 50;

struct StudentRegistration{
    int studentID;
    char name[MAX];
};

    fstream afile;
    ifstream infile;

  afile.open (fileName2, ios::out | ios::binary);
    infile.open (fileName1);

 while (infile >> s.studentID)
    {
        infile.get(space);
        infile.getline(&s.name, MAX);
        afile.seekp((s.studentID-1)*sizeof(StudentRegistration), ios::beg);
        afile.write(reinterpret_cast <const char *>(&s), sizeof(s));
    }

    afile.close();
    infile.close();
const int MAX=50;
结构研究注册{
国际学生;
字符名[MAX];
};
流文件;
河流充填;
afile.open(fileName2,ios::out | ios::binary);
infile.open(fileName1);
而(填充>>s.studentID)
{
填充。获取(空间);
填充.getline(&s.name,最大值);
afile.seekp((s.studentID-1)*大小(学生注册),ios::beg);
文件写入(重新解释铸件,尺寸);
}
afile.close();
infle.close();

我删除了seekp行,现在它似乎做了我想做的事情。

为了澄清为什么会发生这种情况,您的seekp行进一步查找文件,然后写入数据。如果您的文件系统不支持稀疏文件,那么这种查找将导致文件占用您查找的空间,即使您实际上没有在那里写入任何数据。