char* in std::string konvertieren
-
Hallo,
ich hoffe, dass mir jemand helfen kann.
mein Vorhaben:
Ich habe 2. Funktionen.Funktion 1:
liefert mir einen std::string der in etwa so aussieht:
{FE5723B0-CB9C-4102-818E-FAFAA678959C}Funktion 2:
lifert mir einen char* (Unicode) der so aussehen kann:
rpcap://\Device\NPF_{FE5723B0-CB9C-4102-818E-FAFAA678959C}Nun will ich prüfen ob der string(von Funktion 1) im char*(von Funktion 2) enthalten ist.
Meine Frage:
Ist es möglich einen Unicode char* in einen std::string umzuwandeln?
Wie geht das?Freue mich sehr über jede Antwort, auch über andere Ansätze oder Ideen
Vielen Dank im voraus
Gruß Tupo13
-
UNICODE wäre wchar_t* - und den kannst du bestenfalls in einen wstring umwandeln.
char* (ASCII-String) kannst du problemlos per Konstruktor nach std::string umwandeln und anschließend dessen find()-Methode verwenden, um nach potentiellen Teilstrings absuchen:string p1=func1(); string p2=func2(); size_t pos=p2.find(p1); if(pos!=string::npos) cout<<"Gefunden an Position "<<pos<<endl; else cout<<"nicht gefunden"<<endl;
-
@ CStoll
Danke für deine schnelle Antwort:
wie du vielleicht schon vermutest kenne ich mich noch nicht so gut aus.
um auf deinen Tipp zurückzukommen:
Wenn ich es so mache wie du es sagst habe ich folgendes Problem:bei der Ausgabe con string p1 funktioniert alles. Will ich aber jetzt den string p2 also der der zuvor char* war ausgeben bekomme ich nichts als Ausgebe.
Vielleicht noch als zusätzliche Bemerkung. Wenn ich ihn aber als char* lasse und in so ausgebe
printf("Device1: %s\n", dev);
dann bekomme ich die richtige Anzeige
-
Kannst Du mal ein ganzes Beispiel posten und nicht nur erklären?
-
@ Jochen Ok werde ich machen, danke
Hier der Code:
1.
So bekomme ich den std::string, der z.B so
{FE5723B0-CB9C-4102-818E-FAFAA678959C} aussiehtstd::string
std::string initialize::GetMACaddress(void) { std::string IPS; IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs DWORD dwBufLen = sizeof(AdapterInfo); // Save the memory size of buffer DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo AdapterInfo, // [out] buffer to receive data &dwBufLen); // [in] size of receive data buffer assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info IPS=pAdapterInfo->AdapterName; std::cout <<IPS<< std::endl; return IPS; }
2.
So lese ich alle Netzadapter in das array testa, welches vom Typ char* ist.
Wenn ich ein Element des Feldes so ausgebe:printf("Device1: %s\n", testa[1]);
erhalte ich eine Ausgabe, die z.B. so aussieht
rpcap://\Device\NPF_{FE5723B0-CB9C-4102-818E-FAFAA678959C}char* testa[10]; if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1); } /* Print the list */ for(d=alldevs; d; d=d->next) { printf("%d. %s", ++i, d->name); testa[i]=d->name; if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } printf("Device1: %s\n", testa[1]);
3.
Was will ich machen:
Nun will ich schauen in welchem Element von testa der string enthalten ist.4.
Frage:
gibt es vielleicht eine Funktion, welche das selbe wieprintf("Device1: %s\n", testa[1]);
macht, nur eben nicht ausgibt, sondern in einen std::string schreibt?
Vielen Dank für eure Mühen
Gruß Tupo13
-
next Time -> C++ Board, das haben nix mit MFC zu tun
-
@Pallaeon
OK das nächste mal weiß ich das, dachte weil VC++ in Klammer steht-> falsch gedacht
-
Erstens: Was hindert dich daran, komplett auf std::string umzusteigen?
4.
Frage:
gibt es vielleicht eine Funktion, welche das selbe wieprintf("Device1: %s\n", testa[1]);
macht, nur eben nicht ausgibt, sondern in einen std::string schreibt?
Mit C-Strings kannst du über "sprintf(buffer,"Device1: %s\n", testa[1]);" die Daten statt auf Bildschirm in ein char-Array schreiben, für C++-Strings empfehle ich eher "string s=string("Device1: ")+testa[1]+"\n";" (oder da wir im MFC-Board sind: CString::Format()).
-
Hallo, danke euch vielmals für eure Hilfe
Ich habe es jetzt so gemacht:
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { exit(1); } /* Save the list */ for(d=alldevs; d; d=d->next, i++) { devices[i]=std::string(d->name); max_dev=i-1; } for (i=1;i<=max_dev;i=i+1) { size_t pos=devices[i].find(strAdaptername); if(pos!=std::string::npos) { iAdapternr=i; break; } } std::cout<<"Adapter "<<iAdapternr<<std::endl;
Gruß Tupo13