SubByte vergleichen



  • Hm, jetzt müßte man wissen was für ein Typ BYTE ist. Den gibst im Standard nämlich nicht. Ich gehe mal davon aus, daß das ein typedef für ein char ist. In diesem Fall würde die korrekte Belegung der Bytes 1-3 z.B. so aussehen:

    BYTE datagram[16];
        datagram[0] = 0;
        datagram[1] = 's';
        datagram[2] = 'M';
        datagram[3] = 'I';
    

    Deine Version kann definitv nicht funktionieren (du schreibst Pointer in deine Variablen rein, die dann auch noch auf ein BYTE verkürtzt werden).



  • Ok, also ein char isses nicht

    Error	4	error C2440: '=' : cannot convert from 'const char [2]' to 'BYTE'
    

    zumindest, wenn ich die Fehlermeldung richtig interpretier. Aber wirklich schlauer bin ich leider immer noch nicht. Aber wieso sagt er const char[2] wo kommt denn die 2 her?

    Ein weiterer Fehler müsste doch auch noch in dem Vergleich sein, da müsste ich ja nicht die char 0 reinschreiben, sondern die Byte 0, aber wie mache ich das 😞



  • Lern doch erstmal gescheid C++ bevor du sowas machst... Das ganz muss wie oben bereits gesagt in einfach Anführungszeichen!



  • na danke für deine nette und zuvorkommende art.

    ich lass mich aber trotzdem nicht unter kriegen 😉 Wenn ich mir im Speicher jetzt die Adresse auf die der output Zeiger zeigt anschau, dann steht da jetzt .sMI drin, was ja schonmal ganz gut ist 🙂 wie würde ich denn jetzt auf diesen "." in meinem memcmp vergleichen ?



  • Habs jetzt einfach mal so gemacht und es klappt.

    BYTE method[4];
    	method[0] = 0;
    	method[1] = 's';
    	method[2] = 'M';
    	method[3] = 'I';
    
    	if ( memcmp(output, method, 4) == 0 ) 
    	{
    		return 0;
    	}
    

    ist bestimmt nicht schön, aber reicht für einen der nicht "gescheid" c++ kann 🙂



  • Du hast als erstes Zeichen in deinem String eine 0 eingetragen, das ist etwas anderes als '0' (das Zeichen hat den ASCII-Wert 48). Um das in den String einzufügen, mußt du Escape-Sequenzen verwenden:

    BYTE datagram[16];
    datagram[0] = 0;
    datagram[1] = 's';
    datagram[2] = 'M';
    datagram[3] = 'I'; 
    
    ...
    if ( memcmp(output, "\0sMI", 4) == 0 )
      ...
    


  • cool, danke. hat wunderbar geklappt. gibt es noch ne schönere version dem datagramm ne "sMI" an den Anfang zu stellen?



  • memcpy(), strcpy() und Kollegen. Oder du verwendest std::basic_string<BYTE> - der ist wesentlich einfacher zu handhaben.



  • String wäre wohl das beste, aber leider muss die Funktion dann auch noch auf einem embedded system unter c funktionieren, aber das geht jetzt so schon.



  • Probier's doch einfach aus. Wenn's nicht geht - schau dir mal das da an.


Anmelden zum Antworten