我有一個壓縮分配的功能(由於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