我有一个压缩分配的功能(由于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) ;
}
}
}
}
什么是输入?什么是输出?正确的文本和不正确的二进制输出 - 你可以用hexdump或类似的东西来检查后者。什么是_expected_二进制输出? – Useless
main()函数在哪里可以让我们重现问题,而不用猜测'writer()'的参数,并且自己写main()'?并且,在你盯着2小时的时候,你是否试图缩小错误的范围?通过添加一些“检查我的假设”输出?什么是'conversion()'?如果它很重要,为什么不包括它的定义?如果没关系,为什么在你的例子中被调用?缩小范围。这是调试101. – DevSolar
我想知道为什么你有两个完全不同的路径通过'writer()'输出标准输出。你可以对输入做完全相同的事情,然后决定是否将'write()'写入'std :: cout'或'file' ......另外,还有'reinterpret_cast'。这是一种代码味道,这种演员阵容几乎是*永远不会真的需要。 – DevSolar