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 str

    Nun 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 Wert

    So 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.html

    Natü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.


Log in to reply