webForumDet fria alternativet

Problem med TrimEnd() i C#

.NET

2 svar · 287 visningar · startad av Creep

Medlem sedan mars 200341 inlägg
Frågan#1

Hej, jag har nyss börjat med C# och håller på att bygga en Klient/Server applikation med sockets.

Har lite problem med den här koden:

Byte[] recieve = new Byte[64];
int i = mySocket.Receive(recieve, recieve.Length, 0);
string rece = System.Text.Encoding.ASCII.GetString(recieve);

När jag mottar en sträng som är 4 bytes lång (ett kommando till servern) och vill jämföra detta kommando i en if-sats fungerar inte detta, eftersom strängen inte bara består utav de 4 bytesen, utan även 60 "null-tecken". Har försökt använda denna funktion:

char[] unwanted = {' ',' ',' '};
string cmd = rece.TrimEnd(unwanted);

(Är lite osäker med den där arrayen med tre mellanrum, fick koden från en websida) Detta hjälper dock inte ett dugg, utan alla "mellanrum" i strängen är kvar. Har testat rece.Remove(4,60) och det funkar utmärkt, men vad händer när jag skickar ett kommando som är 10 bytes, hur gör jag då? Kan naturligtvis standardisera till 5 bytes eller nåt sånt, och aldrig göra arrayen recieve större än 5 bytes, men jag vill helst kunna ha läsliga kommandon skickade till servern, främst ur kodläslighetssynpunkt.

Skulle vara tacksam för hjälp med detta.

Medlem sedan juni 20022 599 inlägg
#2

Det verkar finnas en överlagrad version av GetString som tillåter att du anger startbyte och längd:

Byte[] recieve = new Byte[64];
int i = mySocket.Receive(recieve, recieve.Length, 0);
string rece = System.Text.Encoding.ASCII.GetString(recieve, 0, i);
Medlem sedan mars 200341 inlägg
#3

Fungerade alldeles utmärkt! Tack så mycket för ett snabbt svar såhär mitt i natten :)

252 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)