我有这个功能用于压缩分配(2天前,我只是想找出问题所在。)
应该打印出stdout输出或将其写入文件。 标准输出是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 ) ;
}
}
}
}
答案 0 :(得分:0)
file.write( reinterpret_cast<const char*>( &i ), 8 ) ;
write()的第二个参数是将要写入的字符的数量。 &i
是8 位位集的位置。
除了您的源代码的所有其他问题(您应该转到codereview.SE),应该是1
,而不是8
。
此外,在每次调用writer()
时,您重新打开输出文件,在此过程中覆盖其内容。
您没有向我们展示调用代码。但是通过一个简单的调整,您可以通过将std::cout
而不是文件名传递给函数,使(通常功能齐全的)std::ostream &
代码也能用于文件,并将其留给调用者是使用writer()
调用std::cout
还是打开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 );