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