Laden...

Zeichen aus Buffer enfernen

Erstellt von EnjoX vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.006 Views
E
EnjoX Themenstarter:in
48 Beiträge seit 2009
vor 14 Jahren
Zeichen aus Buffer enfernen

Hallo

Ich möchte die letzten Zeichen aus dem Buffer entfernen.
Ich erhalte einen Buffer mit 125 Zeichen.
Doch die letzten sind nur leerzeichen diese möchte ich entfernen, dies wollte ich mit der Trim() methode machen doch es funktioniert leider nicht.

hier der Code:


 try
                {
                    Verschluesselung ver = new Verschluesselung();

                    client = servSocket.Accept();

                    Console.Write("Handling client at " + client.RemoteEndPoint + " - ");

                    int totalbytesEchoed = 0;

                    while ((bytesRecvd = client.Receive(rcvBuffer, 0, rcvBuffer.Length, SocketFlags.None)) > 0)
                    {
                        
                        string buffer = Encoding.UTF8.GetString(rcvBuffer);
                        buffer.Trim();
                        
                        Console.WriteLine("Vor verschlüsselung Buffer {0}", buffer);
                        buffer = ver.DecryptMessage(buffer, "Dominik");
                        
                        Console.WriteLine(buffer);
                        not.NotifyBuffer(buffer, "Dominik");
                        //client.Send(rcvBuffer, 0, rcvBuffer.Length, SocketFlags.None);
                        //totalbytesEchoed += bytesRecvd;


                    }

                   


                    client.Shutdown(SocketShutdown.Both);
                    client.Close();
                }

                catch (Exception e) {
                Console.WriteLine(e.Message);
                client.Close();
                }

aber es funktioniert leider nicht, ich hoffe es kann mir jemand helfen.

F
155 Beiträge seit 2009
vor 14 Jahren

Hallo,

die Funktion Trim() ändert den string nicht sie gibt nur den "getrimmten" string als Rückgabewert zurück.

buffer=buffer.Trim()

grüße
FZ

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

C
401 Beiträge seit 2007
vor 14 Jahren

Klar funktioniert das nicht. Strings sind in .Net immutable, das heisst, dass sie nicht verändert werden können. Sämtliche "Mutators" auf Strings geben eine neue Instanz zurück. Also muss dein Code so aussehen:


buffer = buffer.Trim();

Gruß

Dario

edit: zu langsam, aber trotzdem mal zur Klarstellung, warum das so ist gepostet 😉

E
EnjoX Themenstarter:in
48 Beiträge seit 2009
vor 14 Jahren

Danke für die Antwort funktioniert aber leider auch nicht.

C
401 Beiträge seit 2007
vor 14 Jahren

Guck doch mal im Debugger in den String, ob es wirklich Leerzeichen sind. Vielleicht sind es auch andere Steuerzeichen, die nicht dargestellt werden.

E
EnjoX Themenstarter:in
48 Beiträge seit 2009
vor 14 Jahren

stimmt er stellt keine leerzeichen sondern \0\0\0

gesamt steht hier: yyMA8hlyDaoypyKLo1PKeQ==\0\0\0\0\0\0

jetzt habe ich das Prob umgeschrieben und verwende:


char[] trim = {'0','\\'};
buffer = buffer.TrimEnd(trim);

doch das funktioniert leider auch nicht...

C
401 Beiträge seit 2007
vor 14 Jahren

\0 ist ein einzelnes Steuerzeichen und zwar um einen String zu terminieren. In C gibt es eben keine Strings, sondern nur Char-Arrays und die werden mit einem \0 terminiert.

E
EnjoX Themenstarter:in
48 Beiträge seit 2009
vor 14 Jahren

Ich habe es geschafft funktioniert. Danke euch allen 😄

char[] trim = {'\0'};

war die lösung