Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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++_String_Binaryfiles - Fatal编程技术网

C++ 使用输出流创建的二进制输出文件的内容

C++ 使用输出流创建的二进制输出文件的内容,c++,string,binaryfiles,C++,String,Binaryfiles,这段代码编译并执行。它只需打印内容 转换成二进制格式。但是,输出与我预期的不同,即: 输出文件的大小应该比使用std::cout创建的小得多 输出文件的内容应该被压缩,因此当我们在编辑器中打开它时, 我们不应该看到内容 但是为什么下面的代码没有像我希望的那样工作呢?我如何相应地修改它 #include <iostream> #include <vector> #include <fstream> #include <string> #include

这段代码编译并执行。它只需打印内容 转换成二进制格式。但是,输出与我预期的不同,即:

  • 输出文件的大小应该比使用std::cout创建的小得多
  • 输出文件的内容应该被压缩,因此当我们在编辑器中打开它时, 我们不应该看到内容
  • 但是为什么下面的代码没有像我希望的那样工作呢?我如何相应地修改它

    #include <iostream>
    #include <vector>
    #include <fstream>
    #include <string>
    #include <sstream>
    using namespace std;
    
    void WriteStr2BinFh(const string& St, ostream &fn)
    {
       fn.write(St.c_str(), St.length());
    }
    
    
    
    int main  ( int arg_count, char *arg_vec[] ) {
    
        vector <string> Tags;
       // In principle we have millions of such tags
       // Hence we need to compress it into binary output.
        Tags.push_back("0000000000");
        Tags.push_back("0000101110");
        Tags.push_back("0133030122");
        Tags.push_back("0133132033");
        Tags.push_back("1002013320");
        Tags.push_back("1111111111");
        Tags.push_back("1301013133");
        Tags.push_back("3010112111");
        Tags.push_back("3203012113");
        Tags.push_back("3203012212");
    
        //prn_vec<string>(Tags, "\t");
        //cout << endl;
    
        ofstream outfile;
        outfile.open("MyOut.bin", ios::binary|ios::out);
    
        for (unsigned i=0; i <Tags.size(); i++) {
             WriteStr2BinFh(Tags[i]+"\t",outfile);
        }
    
        outfile.close();
    
        return 0;
    }
    
    #包括
    #包括
    #包括
    #包括
    #包括
    使用名称空间std;
    void writestr2binph(常量字符串和St、ostream和fn)
    {
    fn.write(St.c_str(),St.length());
    }
    int main(int arg_count,char*arg_vec[]){
    向量标签;
    //原则上,我们有数百万这样的标签
    //因此,我们需要将其压缩为二进制输出。
    标签。推回(“0000000000”);
    标签。推回(“0000101110”);
    标签。推回(“0133030122”);
    标签。推回(“0133132033”);
    标签。推回(“1002013320”);
    标签。推回(“1111111”);
    标签。推回(“1301013133”);
    标签。推回(“301011211”);
    标签。推回(“3203012113”);
    标签。推回(“3203012212”);
    //prn_vec(标签“\t”);
    //库特
    输出文件大小应该更大
    比那些用
    标准::cout

    “用std::cout创建”是什么意思?
    如果您要保存int而不是字符串,那么它可能会小一些

    输出文件的内容应为 压缩,因此当我们在 编辑,我们不应该看到 内容

    不,它不应该被压缩。您可以使用Boost.Iostreams库来创建压缩文件

    为了便于理解,您可以认为二进制文件包含在调试器中查看内存时可以看到的信息

    此外,对于二进制格式的输出,您应该对所有向量项使用写流方法(在使用
    std::vector
    的情况下,它将有差异)。(对于输出,\t您可以使用运算符 输出文件大小应该更大 比那些用 标准::cout

    “用std::cout创建”是什么意思?
    如果您要保存int而不是字符串,那么它可能会小一些

    输出文件的内容应为 压缩,因此当我们在 编辑,我们不应该看到 内容

    不,它不应该被压缩。您可以使用Boost.Iostreams库来创建压缩文件

    为了便于理解,您可以认为二进制文件包含在调试器中查看内存时可以看到的信息


    同样,对于二进制格式的输出,您应该对所有向量项使用写入流方法(在使用
    std::vector
    的情况下,它将有差异)。(对于输出,您可以使用运算符,您必须以二进制格式写入数据(而不是文本):

    void WriteStr2BinFh(常量字符串和St、ostream和fn)
    {
    char*p=0;
    长l=strtol(St.c_str(),&p);
    
    fn您必须以二进制格式(非文本)写入数据:

    void WriteStr2BinFh(常量字符串和St、ostream和fn)
    {
    char*p=0;
    长l=strtol(St.c_str(),&p);
    fn
    输出文件的内容应该被压缩,因此当我们在编辑器中打开它时,我们应该无法看到内容

    我担心IOStream库不会对您的输出应用任何压缩。正如bb所指出的,您应该使用另一个库来压缩您的流

    输出文件的大小应该比使用std::cout创建的小得多

    作为前一个参数的结果,被视为字节流(恰好是ASCII表示的字符)的输出将“按原样”写入文件,因此大小不会改变

    看一看一般的一些和一些二进制文件

    输出文件的内容应该被压缩,因此当我们在编辑器中打开它时,我们应该无法看到内容

    我担心IOStream库不会对您的输出应用任何压缩。正如bb所指出的,您应该使用另一个库来压缩您的流

    输出文件的大小应该比使用std::cout创建的小得多

    作为前一个参数的结果,被视为字节流(恰好是ASCII表示的字符)的输出将“按原样”写入文件,因此大小不会改变


    一般看一下一个二进制文件。< /P>我不是C++程序员,但我很惊讶,没有人创建一个类来与PACK接口。这个问题在谷歌中显示了相当多。我不是C++程序员,但我很惊讶,显然没有人创建一个类来与PACK接口。这个问题。在谷歌上经常出现。

    void WriteStr2BinFh(const string& St, ostream &fn)
    {
    char *p = 0;
    long l = strtol(St.c_str(), &p);
    fn << l;
    }