Typenumwandlung (Int, String, Cahr[])
-
Hallo zusammen,
ich brauche etwas hilfe, da ich kein so guter C++ Programmierer bin.
Ich muss Daten in einer Textdatei ausgeben, doch diese Akzeptiert nur den Wert:
*const char strNun müsste ich aber so einen ausgeben:
"Fehler: recv, fehler code: %d\n",WSAGetLastError()Ich sende z.B. an einen Server:
CString SendCommand = "0009TWWB1"; send(s,SendCommand,strlen(SendCommand),0); rc=recv(s,buf,256,0);
Der Wert vom Server wird hier gespeichert:
char buf[70]; (also in der buf Variable)
Nur wie kann ich die Variable auswerten (Rückgabe Bespiel)
0068TW;000000WB1;20070308;151800;000000000012345;000000000054321
0068TW; = Länge des Rückgabewertes
000000WB1; = Rückeart
20070308; = Datum
151800; = Uhrzeit
000000000012345; = Fortlaufende Nummer
000000000054321; = Auslese WertSo müsste ich das Auslesen, aber wie, vielleicht hat ja jemnde da ne Hilfe für mich.
Gruß Simon
-
Schau mal in die FAQ unter "Einmal String nach Zahl und zurück", das sollte eigentlich weiterhelfen. (wenn nicht, versuch deine Frage besser zu formulieren und neu zu stellen)
-
Mein Client sendet an den Server einen String:
"0009TW;WB1"Im Server wird Der String in char buf[256] Variable gespeichert.
Nun Möchte ich vergleichen, ob die Variable buf mit einem bestimmten Wert Übereinstimmt, quasi die buf Variable auswerten.
Nur wie vergleiche ich Char[]??
Und wie kann ich CHAR[] auswerten, Also auslesen, was zwichen zeichen 1-15 steht usw.
-
Hier mal der Quellcode vom Server:
//#include <windows.h> //#include <winsock2.h> #include "stdio.h" #include "winsock.h" //Prototypen int startWinsock(void); int main() { long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; char buf[256]; char buf2[300]; char SendClient[11]; // Winsock starten rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } // Socket erstellen acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); } // Socket binden memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(6000); addr.sin_addr.s_addr=inet_addr("127.0.0.1"); rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket an port 6000 gebunden\n"); } long Cancel = 0; // In den listen Modus rc=listen(acceptSocket,10); while(Cancel != 1) { if(rc==SOCKET_ERROR) { printf("Fehler: listen, fehler code: %d\n",WSAGetLastError()); Cancel = 1; return 1; } else { printf("acceptSocket ist im listen Modus....\n"); } // Verbindung annehmen connectedSocket=accept(acceptSocket,NULL,NULL); if(connectedSocket==INVALID_SOCKET) { printf("Fehler: accept, fehler code: %d\n",WSAGetLastError()); Cancel = 1; return 1; } else { printf("Neue Verbindung wurde akzeptiert!\n"); } // Daten austauschen while(rc!=SOCKET_ERROR) { rc=recv(connectedSocket,buf,256,0); if(rc==0) { printf("Server hat die Verbindung getrennt..\n"); //Cancel = 1; break; } if(rc==SOCKET_ERROR) { printf("Fehler: recv, fehler code: %d\n",WSAGetLastError()); Cancel = 1; break; } buf[rc]='\0'; SendClient = "0009TW;WB1"; printf("Client sendet: %s\n",buf); if(buf == SendClient) // Abfrage was gesendet wurde // HIER MUSS DIE AUSWERTUNG DES GESENDETEN ERFOLGEN // NUR WENN DER STRING RICHTIG IST SOLL ETWAS ZURÜCKGESENDET WERDEN { sprintf(buf2,"0068TW;000000WB1;20070308;151800;000000000012345;000000000054321;%s","\n"); rc=send(connectedSocket,buf2,strlen(buf2),0); } } } closesocket(acceptSocket); closesocket(connectedSocket); WSACleanup(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
-
C-Strings kannst du mit strcmp und std::strings mit operator== vergleichen.
strcmp kannst du nehmen, wenn du nicht extra nochmal in einen STL-String umwandelt willst.http://www.cplusplus.com/reference/clibrary/cstring/strcmp.html
http://www.cppreference.com/cppstring/index.htmlNatürlich kannst du auch von Hand Zeichen für Zeichen vergleichen
Edit: Schande über mich: natürlich op== und nicht op= :o
-
Grimmsimon schrieb:
Nur wie vergleiche ich Char[]??
strcmp().
Und wie kann ich CHAR[] auswerten, Also auslesen, was zwichen zeichen 1-15 steht usw.
Per Index-Zugriff [] die einzelnen Werte betrachten (Achtung - der Index wird ab 0 gezählt)
-
die Header die du drin hast gibt es so vom std. her net.