c++ string Funktion

Gast #3890352
Hallo.

Ich habe die Funktion GetData(), die mir einen Zeiger auf unsigned Daten 
bereitstellt. Da ich innerhalb dieser Daten viel ersetzen und 
vergleichen muss, möchte ich die std::string Funktionen nutzen.Daher 
erzeuge ich mir einen string der die Daten aufnimmt.

Meine Frage nun:
Wenn ich strData.find aufrufe mit 0xff wird die warning:c4309 
ausgegeben(visual studio), was besagt, das ein unsigned char nicht in 
char passt.
Denn Wert findet er trotzdem.Warum wird nun wenn ich caste(siehe unten)
die Warnung weggebügelt? Was geht da intern vor?

#define VALUE 0xff
GetData(unsigned char * Data, int length)
{
    std::string strData(Data, Data+length);
    strData.find(VALUE,0); //generiert c4309

    str.Data.find((unsigned char)VALUE,0);//kein c4309
}

Danke.
Gast
Zusatz:

Ich weiß, das std::string nichts weiter als ein template für char ist. 
Wenn ich also caste mit (unsigned char), muss doch erst recht die 
Warnung ausgegeben werden, oder?
Gast
Du kannst dein Problem grundlegend lösen, indem du einen string aus 
"unsigned char" verwendest:
1
std::basic_string<unsigned char> strData (Data, Data+length);
2
strData.find(VALUE, 0);

Außerdem gibt es keinen Grund, eine Preprozessor-Textersetzung für 
"VALUE" zu verwenden. Nimm eine Konstante, wie sich das gehört:
1
static const unsigned char VALUE = 0xFF;
So vermeidest du gleich die Typ-Verwirrung...

Christian schrieb:
> strData.find(VALUE,0); //generiert c4309
Hier initialisierst du den Parameter vom Typ "char" mit 0xFF, was nicht 
hineinpasst.
>     str.Data.find((unsigned char)VALUE,0);//kein c4309
Hier initialisierst du einen "unsigned char" mit 0xFF (was passt) und 
konvertierst das Ergebnis nach "char" (was undefiniert ist, aber deinen 
Compiler nicht zu einer Warnung veranlässt).

Warum übergibst du nicht eigentlich gleich einen std::string bzw 
std::basic_string<unsigned char> ?
Gast
Das hatte ich auch schon versucht :
std::basic_string<unsigned char> strData (Data, Data+length);
strData.find(VALUE, 0);

Habe aber an vielen Stellen so was hier:
strData.find(";",0);

Wenn ich nun strData als unsigned char mache(wie oben),bekomme ich 
Fehlermeldungen und ich müsste alles casten, was mir nicht gefällt:
strData.find((unsigned char)";",0);

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.