[C++] Text zu binär und umgekehrt

Ah...ok
Ich beginne es zu verstehen!
Gut! Danke! Wenn das Programm fertig ist, werde ich es hier hoch stellen!
Kann aber noch ne Nacht dauern! ^^

Mfg
Termy2007
 
Noch eine Frage:
Welche Headerdatei deklariert den "Stringbuilder"?

Code:
error C2065: 'StringBuilder': nichtdeklarierter Bezeichner
 
Nicht böse sein MCoder, dass ich deinen Code kommentiere ;)
Hallo Peter, das ist überhaupt kein Problem. Ich habe mich eh nach erfolgreich abgeschicktem Post ins Wochenende und in den Biergarten verabschiedet, so dass die Erklärung sonst ziemlich spät gekommen wäre :)

Welche Headerdatei deklariert den "Stringbuilder"?
Hallo Termy2007, die StringBuilder-Klasse müsstest du mit
C++:
using namespace System::Text;
"erwischen".

Gruß
MCoder
 
Und wie sieht es damit aus?

Code:
CharEnumerator enumerator

EDIT: Hat sich erledigt! Hab übersehen, dass es schon funktioniert hat! Sorry!
MfgTermy 2007
 
Zuletzt bearbeitet:
"CharEnumerator" liegt direkt im System-Namespace, also using namespace System;.
Für solche Fragen ist ein Blick in die MSDN sehr zu empfehlen.

Gruß
MCoder
 
Ich gebs auf!
Gibts da nix besseres, was auch wirklich auf C++ 2005 oder 2003 abgestimmt ist?
Die C-Funktionen sind mir ein wenig zu anfällig für Fehler (zumindest unter C++)!!

Im Grunde braucht man gar nicht so viel:
- Funktion, die den eingegebenen Text im seine "Einzelzeichen" zerlegt
- Funktion, die das jeweilige Zeichen umformt
- Funktion, die die Umformung in einen String umwandelt

Das alles haben wir ja schon und nach ein paar Veränderungen hat das Kompilieren auch gut funktioniert.....aber das Programm stürzt dann on-the-run beim Umformen ab!

Vor allem das Zerlegen wäre mir wichtig! Die anderen C-Codes haben funktioniert!

Freue mich auf Antworten!
Mfg Termy 2007
 
Zuletzt bearbeitet:
Welche C-Funktionen verwendest du denn ?

Ich habe mir ne kleine Demoapplikation gebastelt die mir genau deine gewünschten Umwandlungen durchführt.

Habe aber nur mit bis zu 20 Zeichen langen Texten getestet.

In meinem code wird keine reine c Funktion verwendet!

Du beschreibst dein Schritte, die zu tun hast, doch ziemlich genau:
[ZITAT}
Im Grunde braucht man gar nicht so viel:
- Funktion, die den eingegebenen Text im seine "Einzelzeichen" zerlegt
- Funktion, die das jeweilige Zeichen umformt
- Funktion, die die Umformung in einen String umwandelt
[/ZITAT}

Dann mach doch genau des ;-)
Ich schreibe mir meine Funktionen lieber selber, anstatt Stundenlang nach einer existierenden Lösung zu finden.

Dafür wende ich maximal 1 Stunde auf!

Viel Erfolg,

Peter
 
Hallo!
Mein Problem war folgendes:
Code:
CharEnumerator enumerator = txt.GetEnumerator();
Hier hat mir der Compiler irgendwas von "cannot convert to int" ausgegeben...und dann hatte ich noch ein Problem mit der Initialisierung vom StringBuilder:
Code:
StringBuilder sb = new StringBuilder();
Da hat er mir gesagt, dass er die gewünschte Funktion nicht aufrufen kann!

Naja! Jedenfalls hab ichs mal anders versucht:
Code:
 progressBar1->Value = 0;
				 progressBar1->Maximum = 5;//Convert::ToInt32(textBox1->Text->GetEnumerator());

				 System::String ^text = textBox1->Text;
				 int i = 1;
				 int text_lenth = 5;//progressBar1->Maximum; 
				 int text2_lenth = 0;//Convert::ToInt32(textBox2->Text->GetEnumerator());
				

				 while (i <= text_lenth)
				 {
					 char current_char = Convert::ToChar(text->Substring(i, 1));
					 Int16 myInt = (short)current_char;
                     textBox2->Text->Insert(text2_lenth, myInt >= 128?"1":"0");
                     if (myInt >= 128) myInt -= 128;
                     textBox2->Text->Insert(text2_lenth, myInt >= 64? "1" : "0");
                     if (myInt >= 64) myInt -= 64;
                     textBox2->Text->Insert(text2_lenth, myInt >= 32? "1" : "0");
                     if (myInt >= 32) myInt -= 32;
                     textBox2->Text->Insert(text2_lenth, myInt >= 16 ? "1" : "0");
                     if (myInt >= 16) myInt -= 16;
                     textBox2->Text->Insert(text2_lenth, myInt >= 8 ? "1" : "0");
                     if (myInt >= 8) myInt -= 8;
                     textBox2->Text->Insert(text2_lenth, myInt >= 4 ? "1" : "0");
                     if (myInt >= 4) myInt -= 4;
                     textBox2->Text->Insert(text2_lenth, myInt >=  2 ? "1" : "0");
                     if (myInt >= 2) myInt -= 2;
                     textBox2->Text->Insert(text2_lenth, myInt >= 1 ? "1" : "0");
                     if (myInt >= 1) myInt -= 1;

					 i++;

				 }
Kompilieren geht! Doch während das Programm läuft, ich meine 5 Testzeichen eingebe und dann auf "Zu Binary" drücke kommen Runtime-Errors. Das liegt momentan an der Substring Funktion! Hab ich wohl noch nicht richtig verstanden!

Hast du (oder auch andere) einen Tipp für mich?
 
Hi,

dein Problem ist folgendes:

Du iterierst über den String 'txt' mit :


Code:
    int i = 1;
    while (i <= text_lenth)
    {
    }

Das muss aber so aussehen :

Code:
    int i = 0;
    while (i < text_lenth)
    {
    }

Indizes beginnen immer bei 0.

Du bist bei deiner Schleife über die Stringlänge hinausgeschossen. Das knallt immer.

Iterationen über Arrays immer von 0 bis length - 1.

Aber deine Probleme mit dem Compiler versteh ich immer noch nicht.

Du verwendest doch auch MS VS2005 oder?

Ich habe ein neues c#-Windows Projekt gestartet, den Code aus meinem ersten Beitrag reingeschrieben, kompiliert und es lief sofort!


Ich poste dir jetzt noch mal meinen gesamten Quelltext meiner Form.
Vielleicht fehlt dir ja die richtige using Anweisung

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string txt = textBox1.Text;
            StringBuilder sb = new StringBuilder();

            CharEnumerator enumerator = txt.GetEnumerator();
            while (enumerator.MoveNext())
            {
                Char c = enumerator.Current;

                Int16 myInt = (short)c;
                sb.Append(myInt >= 128 ? "1" : "0");
                if (myInt >= 128) myInt -= 128;
                sb.Append(myInt >= 64 ? "1" : "0");
                if (myInt >= 64) myInt -= 64;
                sb.Append(myInt >= 32 ? "1" : "0");
                if (myInt >= 32) myInt -= 32;
                sb.Append(myInt >= 16 ? "1" : "0");
                if (myInt >= 16) myInt -= 16;
                sb.Append(myInt >= 8 ? "1" : "0");
                if (myInt >= 8) myInt -= 8;
                sb.Append(myInt >= 4 ? "1" : "0");
                if (myInt >= 4) myInt -= 4;
                sb.Append(myInt >= 2 ? "1" : "0");
                if (myInt >= 2) myInt -= 2;
                sb.Append(myInt >= 1 ? "1" : "0");
                if (myInt >= 1) myInt -= 1;
                sb.Append(" ");
            }

            textBox2.Text = sb.ToString();

        }
    }
}

Mit dem Code kann ich einen beliebig langen Text in einen binären String umwandeln.

Bis denne,

Peter
 
Hallo pschilling

Das muss aber so aussehen :

Code:
int i = 0;
    while (i < text_lenth)
    {
    }

Wenn ich das so mache! Passiert gar nichts mehr, wenn ich den "To Binary" Button drücke.

Du verwendest doch auch MS VS2005 oder?
Nicht ganz! MS VC++ 2005 Express

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

Braucht man die wirklich alle?
Ich werds mal mit allen versuchen! Ich meld mich wenns funkrioniert/nicht funktioniert hat.

Mfg
Termy2007
 

Neue Beiträge

Zurück