使用fstream写入空格时的空格

时间:2016-11-07 17:04:22

标签: c++ string file fstream

使用fstream在文件中写入字符串是在每个字母之间放置一个空格,我写的字符串来自将二进制代码转换为ascii的函数:

void almacenar(string texto)
{    
    string temp;   
    string test = "hola";   
    string compreso =""; 

    remove("compreso.daar");

    int textosize=texto.size();   
    int i = 0;

    while (i<textosize){   
        while(temp.size()!=8){   
            temp=temp+texto[i];  
            i++;   
            if (i>=textosize) {   
                break;
            }
        }    
        compreso=compreso+bitoascii(temp);   
        temp.clear();   
    }     
    Escribir(test,"compreso.daar");
}

int Escribir(string i,const char* archivo)
{   
    fstream outputFile;   
    outputFile.open(archivo, fstream::app);       
    outputFile<<i;   
    outputFile.close();   
    return 0;   
}     

string bitoascii(std::string data)
{  
   std::stringstream sstream(data);  
    std::string output;  
    while(sstream.good())  
    {
        std::bitset<8> bits;  
        sstream >> bits;  
        char c = char(bits.to_ulong());  
        output += c;  
    }
   return output;
}

文件应该有“Ø”有“Ø”或“ØØ”是“ØØ”如果我通过控制台打印包含Ø的字符串它没有空格

1 个答案:

答案 0 :(得分:0)

在函数bitoascii()中,在将数据从sstream传输到bits之后,您不会检查传输是否成功,而不是转换数据,而是bits的值是0x00并且值记录在文件中,但字符'\0'不可打印。

  

只需添加sstream.good()即可知道bits是否正确无误   在输出字符串中添加字符之前写入。

函数bitascii()应为:

string bitoascii(std::string data)
{  
   std::stringstream sstream(data);  
    std::string output;  
    while(sstream.good())  
    {
        std::bitset<8> bits;  
        sstream >> bits;
        // check is the transfer failed then exit from while
        if (!sstream.good()) break;  
        char c = char(bits.to_ulong());  
        output += c;  
    }
   return output;
}