将位集写入文件时出错
Bug with writing bitset to file
我有这个函数用于压缩任务(2天前到期,我只是想找出出了什么问题(。
它应该打印出来以标准输出输出或将其写入文件。标准输出是 100% 准确的。
但是,二进制写入总是会产生垃圾。 例如,它应该是 23 字节的输出,但始终是 16 字节,并且不像它应该是什么。我已经盯着这个看了 2 个小时,谁能提供关于问题所在提示?
非常感谢。
void writer(char character, int count,std::string outputpath){
if(outputpath == "cout"){
switch(count){
case 1:{
std::cout << character;
break;
}
case 2:{
std::cout << character<< character;
break;
}
default:{
std::cout << character;
auto output = conversion(count);
for(auto i: *output){
std::cout << i;
}
}
}
}else{
std::vector<std::bitset<8>> source;
std::bitset<8>temp(character);
switch(count){
case 1:{
source.push_back(temp);
break;
}
case 2:{
source.push_back(temp);
source.push_back(temp);
break;
}
default:{
source.push_back(temp);
auto output = conversion(count);
for(auto i: *output){
source.push_back(i);
}
}
}
//write
{
std::ofstream file( outputpath, std::ios::binary ) ; // output file stream
// write the contents of the vector to the file
for( auto i : source ){
file.write( reinterpret_cast<const char*>( &i ), 8 ) ;
}
}
}
}
file.write( reinterpret_cast<const char*>( &i ), 8 ) ;
write(( 的第二个参数是将写入的字符数。 &i
是 8 位位集的位置。
撇开你的来源的所有其他问题(你也许应该去 codereview.SE(,这应该是一个1
,而不是一个8
。
此外,在每次调用 writer()
时,您都会重新打开输出文件,并在此过程中覆盖其内容。
你没有给我们看呼叫代码。但是通过一个简单的调整,你可以使(据报道功能齐全的(std::cout
代码也适用于文件 - 通过将std::ostream &
而不是文件名传递给函数,并将其留给调用者是使用 std::cout
调用writer()
还是打开outputpath
:
void writer( char character, int count, std::ostream & out )
{
switch( count )
{
case 1:
{
out << character;
break;
}
case 2:
{
out << character << character;
break;
}
default:
{
out << character;
auto output = conversion( count );
for ( auto i: *output )
{
out << i;
}
}
}
}
调用std::cout
输出:
writer( character, count, std::cout );
调用文件输出:
std::ofstream file( outputpath, std::ios::binary );
// ...
writer( character, count, file );
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 在 C/C++ 中打开驻留在 "/sys/" 下的文件时出错
- 在头文件中定义变量不会出错
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 生成文件中隐式规则中的 -c 标志出错
- 编译时出错 - 链接.cpp和头文件
- 从人员矢量插入和读取文件时出错
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 猫鼬 - 包含标准C++库文件时出错
- 在f2c.h文件中定义min()max()宏时出错
- ASIOSDK;从hostsample.cpp生成mex文件时出错
- 使用emscripten将c++文件转换为wasm时出错
- 编译后可执行文件出错
- 头文件C++出错
- ftell 非常大的文件出错
- 从磁盘读取映像文件出错