C++ 将二进制文件读入向量
我找到了一些关于如何做的答案,但我的问题是,为什么我与使用C文件函数或流读取函数有所不同 如果我这样做:C++ 将二进制文件读入向量,c++,C++,我找到了一些关于如何做的答案,但我的问题是,为什么我与使用C文件函数或流读取函数有所不同 如果我这样做: auto fp = fopen( read_file.c_str(), "rb" ); fseek( fp, 0, SEEK_END ); auto file_sz = ftell( fp ); std::vector< unsigned char > data( file_sz, 0 ); fseek( fp, 0, SEEK_SET ); fread( &da
auto fp = fopen( read_file.c_str(), "rb" );
fseek( fp, 0, SEEK_END );
auto file_sz = ftell( fp );
std::vector< unsigned char > data( file_sz, 0 );
fseek( fp, 0, SEEK_SET );
fread( &data.at( 0 ), 1, file_sz, fp );
fclose( fp );
std::istream_iterator< unsigned char >
it_begin( orig_file );
std::istream_iterator< unsigned char >
it_end;
std::vector< unsigned char >
data( it_begin, it_end );
auto fp=fopen(read_file.c_str(),“rb”);
fseek(fp,0,SEEK_END);
自动文件_sz=ftell(fp);
std::vector数据(文件_sz,0);
fseek(fp,0,SEEK_集);
fread(&data.at(0),1,文件_sz,fp);
fclose(fp);
然后,数据有10384个与文件_sz匹配的值
如果我这样做:
std::ifstream orig_file( read_file, std::ios_base::binary );
if( orig_file.fail() )
{
std::cout << "Error Opening Input File [" << read_file << "]. " << strerror( errno ) << "\n";
return;
}
orig_file.seekg( 0, std::ios::end );
auto len = orig_file.tellg();
orig_file.seekg( 0, std::ios::beg );
std::vector< unsigned char >
data( len );
orig_file.read( ( char * )&data[ 0 ], len );
std::ifstream源文件(读取文件,std::ios\u base::binary);
if(orig_file.fail())
{
std::cout());
数据只有10374字节。谢谢
我不明白在插入向量时9个字节是如何丢失的。你能帮我解释一下吗?我猜你在文件的末尾有一些被视为空白的东西。如果你尝试签出它,会发生什么情况?默认情况下它跳过空白,禁用它确实是跳过了空白。我的guess是指文件末尾的某些内容被视为空白。如果您尝试签出它,会发生什么情况?默认情况下,它会跳过空白,要禁用它,实际上是跳过了空白。
data.assign( it_begin, std::istream_iterator< unsigned char >() );