[C++] Problem mit Binärkonvertierung
-
Hey Leute, ich bin neu hier auf dem Forum

Ich als C++ Neuling bin (mal wieder) auf ein Problem gestoßen. Ich versuche ein Programm zu schreiben, welches einen text(als string) in einen binären text(als string) umwandelt. Dabei soll es jeden character des strings in eine binäre Zahl des ASCII Codes konvertieren. Hier mein bisheriger Code:#include <iostream> #include <string> using namespace std; string char2bin(char c); //Buchstaben in Binäre Zahl als String string string2bin(string text); //char2bin() für jeden char eines strings char bin2char(string bin); // binären Character(string) in character (buchstabe) string bin2string(string s); //Binären Text in normal lesbaren Text int main() { string text2encode, text2decode; cout << "ENTER TEXT TO ENCODE :"; getline(cin, text2encode); cout << endl << "text2encode : (" << text2encode << ")" << endl; cout << endl << "ENCODED TEXT: (" << string2bin(text2encode) << ")" << endl; while (true) { cout << endl << "ENTER TEXT TO DECODE :"; getline(cin, text2decode); cout << endl << "DECODED TEXT: (" << bin2string(text2decode) << ")" << endl; } getchar(); return 0; } string char2bin(char c) { string s; int x = (int)c; int output[8]; for (int i = 0; i < 8; i++) { output[i] = x % 2; x = x / 2; } for (int i = 7; i >= 0; i--) s += to_string(output[i]); return s; } string string2bin(string text) { string output; for (int i = 0; i < text.length(); i++) output += char2bin(text[i]); return output; } char bin2char(string bin) // e = 01100101 { int result = 0; for (int i = bin.length() - 1; i >= 0; i--) //for int i = 7; i >=0; i--) result += (int)(bin[i] - '0') * pow(2, bin.length() - 1 - i); return (char)result; } string bin2string(string bin) { string output; for (int i = 0; i < bin.length(); i += 8) output += bin2char(bin.substr(i, i + 8)); return output; }Kopiert mal einfach den Code und führt ihn aus. Das Codieren funktioniert ohne Probleme. Das Decodieren hat Probleme. Beispiel:
Zunächst codiere ich "a ", also ein a und ein leerzeichen.
Ich erhalte: 0110000100100000 folglich für "a":01100001 und für " ":00100000Hiermit http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/Binary_To_Text.asp kann man das überprüfen, dass bei der codierung nichts schief gelaufen ist.
So, nun versuchen wir mal verschiedene dinge zu decodieren.
1. "01100001" -> wir erhalten richtigerweise ein "a"
2. "00100000" -> wir erhalten richtigerweise ein " "
3. "0110000100100000" -> wir erhalten richtigerweise "a "
4. "0010000001100001" -> wir erhalten richtigerweise " a"Versuche ich aber "011000010010000001100001" (= "a a") zu decodieren erhalte
ich "aaa". Irgendwie wird aus dem " " das Zeichen was danach folgt. Egal was wir
nach dem Leerzeichen " " setzen, das Leerzeichen wird immer zu dem Zeichen was danach kommt."a x" wird zu "axx" usw.
Woran liegt das ? Kann mir da einer helfen? Oder habe ich da nur etwas übersehen ?
Wenn ihr keine Lust habt euch die Funktionen genau anzuschauen könnt ihr mich auch auf skype(sbardila99) adden, und ich erklär euch die ganz bequem.
Danke schonmal im Voraus für eure antworten
-
Was möchte substr als Argument haben?
-
manni66 schrieb:
Was möchte substr als Argument haben?
substr() nimmt einen teil eines strings, es braucht 2 Argumente:
1. Von wo soll der string beginnen (einschließlich des arguments)
2. Wo soll der string enden (ausschließlich des arguments)Beispiel: Ich habe einen String mystring = "0123456789"
wenn ich nur die zahlen 4567 haben möchte mache ich folgendes.
string mysubstring = mystring.substr(4,8);die 4 wird noch mit in den string genommen, die 8 nicht mehr sondern nur das was davor kommt.
Hoffe das war das was du gemeint hast
-
Sbardila schrieb:
Hoffe das war das was du gemeint hast
Nun, ich habe gemeint, dass du deine Annahme überprüfen solltest.
-
manni66 schrieb:
Sbardila schrieb:
Hoffe das war das was du gemeint hast
Nun, ich habe gemeint, dass du deine Annahme überprüfen solltest.
Oh xD danke
das hat mir grad auch n Kollege auf skype gesagt
Der 2. parameter ist ja die länge ._. vielen vielen dank für deine hilfe ! 