2016-11-07 3 views
0

Mit fstream einer Zeichenkette in einer Datei zu schreiben, ist ein Leerzeichen zwischen jedem Buchstaben setzen, die Zeichenfolge i stammt aus einer Funktion schreibe, die Binär-Code in eine ascii konvertiert:Leerzeichen bei der Verwendung von fstream schreibt man ein

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; 
} 

die Datei sould „Ø“ haben „Ø“ oder „oo“ ist „Ø Ø“ wenn ich die Zeichenfolge über eine Konsole drucken, Ø enthält es keine Räume

+1

Bitte geben Sie eine [Minimal, vollständig und prüfbare Beispiel] (http://stackoverflow.com/help/mcve) –

+0

BTW, sollten Sie erklären ' textosize' als 'const int', da es sich nach der Zuweisung nicht ändert. Ähnlich für andere Variablen. –

+0

Ist 'Ø' ein ASCII-Zeichen? Was ist der [ASCII-Code] (https://en.wikipedia.org/wiki/ASCII)? Woher weißt du, dass es Räume gibt? –

Antwort

0

In der Funktion bitoascii(), nachdem Daten aus Übertragung sstream bis bits Sie überprüfen nicht, ob die Übertragung erfolgreich war und anstelle von Daten den Wert bits ist 0x00 und der Wert wird in der Datei aufgezeichnet, aber das Zeichen '\0' ist nicht druckbar.

Fügen Sie einfach ein sstream.good() zu wissen, ob bits korrekt geschrieben wurde, bevor die Zeichen in der Ausgabezeichenfolge hinzufügen.

Die Funktion bitascii() sein sollte:

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; 
} 
+0

Danke für die Hilfe –

+0

Humm, danke auch, ich habe noch nicht mit 'bitset' gespielt. Also, helfen und spielen sind die besten. –

Verwandte Themen