Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Convert wchat_t nach char ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.07.2004, 11:52 Uhr
~centrino
Gast


Hallo,
ICh habe folgendes Code-Segment:


C++:
PMIB_IFROW pMibIfRow;

char *pmbbuf   = (char *)malloc( sizeof(pMibIfRow->wszName));

printf( "\tMultibyte character: %s\n\n", pmbbuf );
j=wcstombs(pmbbuf, pMibIfRow->wszName,sizeof(pMibIfRow->wszName));

printf( "\tCharacters converted: %u\n", j );
printf( "\tMultibyte character: %s\n\n", pmbbuf );



Wobei pMibIfRow ist von WCHAR Type mit 256 Bytes.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rras/rras/mib_ifrow.asp

Ich möchte diese String wiedergeben, aber es klappt irgendwie nicht. Kann mir jemand sagen , was ich falsch gemacht habe ?

gruesse
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.07.2004, 09:53 Uhr
RHBaum



1. Was soll dir dein erstes printf ausgeben ? In dem String steht doch noch nix drin ?

2. nen sizeof bringt Dir mit sicherheit ned die Laenge des Strings.
Entweder du nimmst auch die konstante die Dir die Struct als Maximale Laenge definiert ... oder du verwendest wcslen.

3. dein pMibIfRow hasst doch grad erst deklariert ? soll da schon was vernuenftiges drinstehen ? oder hasst das nur fuer die beserre Uebersicht dahingeschrieben ?


C++:
char pmbbuf[MAX_INTERFACE_NAME_LEN ];

size_t j=wcstombs(pmbbuf,pMibIfRow->wszName,MAX_INTERFACE_NAME_LEN);
printf( "\tCharacters converted: %u\n\tMultibyte character: %s\n\n", j ,pmbbuf);



wenn es denn unbedingt dynamisch brauchst ....


C++:
size_t ilen = wcslen(pMibIfRow->wszName);
char * pmbbuf = (char *) malloc(ilen * sizeof(char));

size_t j=wcstombs(pmbbuf,pMibIfRow->wszName,ilen);
printf( "\tCharacters converted: %u\n\tMultibyte character: %s\n\n", j ,pmbbuf);

free( pmbbuf);



kenn mich in C aber ned wirklich so gut aus ...
und wie gesagt, pass auf dass in deiner struct PMIB_IFROW was gescheites drinnsteht ...

Ciao ...

Dieser Post wurde am 05.07.2004 um 09:57 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.07.2004, 12:22 Uhr
~centrino
Gast


Hallo RHBaum,

Danke für Deine Antwort. Ich hatte vorher auch so probiert aber es hat nichts genutzt. Die Ausgabe sieht so aus: ( laute komische Zeichen !)

pMibIfRow->dwSpeed 10000000
haracters converted: 257
Multibytecharacter:╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
.....

Der struct pMibIfRow ist nicht leer, es wurde vorher mit GetIfEntry(pMibIfRow) die Werte reinsgeschieben oder gepoint.

Ich kann dwSpeed oer Index von Interface lesen ,aber wie geasgt nicht wszname.
wszname solllte ungefähr so aus sehen: {123FE-213OE-122134-34344--234234}

Nebenbei andere Frage : Kann man ausser IPhhelp.lib oder Auslesen von WinRegistry mit anderen Methoden diesen Interface-Servicenamen rausbekommen ?

Gruesse
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.07.2004, 09:36 Uhr
RHBaum



Benutzt du wirklich VC++ und die MFC ? dann machst dir es hier eh zu schwer :-)

CString kann glaub ich automatisch konvertieren ....

du bist dir sicher, das GetIfEntry was gescheites zurueckliefert ? Ich mein das die funktion wirklich erfolg hat ?

Ich selber nutz wcstombs kaum, sondern die winAPI funktion direkt WideCharToMultiByte. Aber glaub daran liegts ned ....

versuch mal den String direkt auszuprinten ....


C++:
wprintf(L"Wide character: %s\n",pMibIfRow->wszName);


Was gibt das fuer ne ausgabe ?

Ciao ...

Dieser Post wurde am 06.07.2004 um 09:37 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.07.2004, 23:10 Uhr
~centrino
Gast


Hi RHBaum,
Diese Zeile hatte ich früher schon aus anderen Eintrag genommen, sogar mit "ws", aber

wprintf(L"Wide character: %s\n",pMibIfRow->wszName);

liefert gar nicht zurück.

C++:
                pMibIfRow->dwIndex = i;
                if ((dwRetVal = GetIfEntry(pMibIfRow)) == NO_ERROR) {

                     j=wcstombs(pmbbuf, pMibIfRow->wszName,MAX_INTERFACE_NAME_LEN);
                    printf( "\tCharacters converted: %u\n\n", j );
                   printf( "\tMultibyte character: %s\n\n", pmbbuf );
                           printf("\t pMibIfRow->bDescr %s\n", pMibIfRow->bDescr);

                    wprintf(L"\t pMibIfRow->wszName %s\n", pMibIfRow->wszName);
}



Ausgabe sieht so aus:

Characters converted: 4294967295 <--- ist das vielleicht richtig ?
Multibyte character: ( laute II=II=II=II= Zeichen )
pMibIfRow->bDescr Broadcom 440x 10/100 Integrated Controller - Packet Scheduler Miniport
pMibIfRow->wszName

die Fkt WideCharToMultiByte sieht so kompliziert aus, kann man auch vereinfachen ? Ich schaue es mir später an.

gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: