wchar_t* zu int OHNE Funktionsaufruf
-
Hallo,
ich will einen wchar_t* ohne Aufruf weiterer Funktionen zu int konvertieren. Wie mache ich das? Ich habe aber nicht mal Information zur wchar Codierung gefunden. Außerdem kann ich einen wchar_t* nicht mal richtig ausgeben, brauche ich da vielleicht irgendwelche includes?
Vielen Dank für Eure Hilfe im voraus.
-
Bespiel:
wchar_t* wcharstring = L"Hallo";
Was erwartest du jetzt für eine Zahl als Ausgabe?
-
Natürlich nur für Ziffernstrings a la L"293".
Sorry, hab vergessen, das zu erwähnen.
-
Wieso denn ohne Aufruf weiterer Funktionen? Der Sinn von Unicode ist es doch, sämtliche Schriftzeichen zu ermöglichen, inklusive verschiedener Zahlendarstellungen.
-
Es müsste doch eigentlich genauso gehen wie bei char. Das 2. Byte ist bei Ziffern glaub ich immer 0.
-
Bei Zeichen aus Latin-1 ist es ohnehin einfach.
wchar_t* wString = L"123";
char c = (char)*wString; // c ist nun '1'Für die meisten Zeichen (x) aus Latin-1 gilt, dass 'x' == (char)L'x'.
-
Neku schrieb:
Für die meisten Zeichen (x) aus Latin-1 gilt, dass 'x' == (char)L'x'.
dann also sowas etwa:
unsigned int wcs_toint (wchar_t *w) { unsigned int r = 0; while (*w) { r = r * 10; r = r + *w++ - '0'; } return r; }
-
unsigned int wcs_toint (const wchar_t *w) // const { unsigned int r = 0; while (*w >= L'0' && *w < L'9') { r *= 10; r += *w++ - L'0'; } return r; }
-
Danke. Funktioniert. Aber nur nochmal zum Verständnis, man will ja auch was lernen: - L'0' wird gemacht weil... das zweite Byte 0 ist?
-
Nerd32 schrieb:
Danke. Funktioniert. Aber nur nochmal zum Verständnis, man will ja auch was lernen: - L'0' wird gemacht weil... das zweite Byte 0 ist?
"- L'0'" zieht den Unicode-Wert des Unicode-Zeichens '0' ab. "*w" ist ja bei dir nicht zwischen 0 und 9, sondern zwischen L'0' und L'9'.
*edit*
unsigned int wcs_toint (const wchar_t *w) { unsigned int r = 0; while (*w >= L'0' && *w <= L'9') // "=" vergessen { r *= 10; r += *w++ - L'0'; } return r; }
-
Es muß while(*w >= L'0' && *w <= L'9') heißen. Es funzt aber nicht mit führenden Nullen, was aber kein Problem sein sollte.
-
Nerd32 schrieb:
Es funzt aber nicht mit führenden Nullen...
dann nimm den
int wcs_toint (const wchar_t *w) { int r = 0; int f = 0; if (*w == '-') { f = 1; w++; } while (*w >= '0' && *w < '9') r = 10 * r + *w++ - '0'; return f ? -r : r; }
-
Nerd32 schrieb:
Es muß while(*w >= L'0' && *w <= L'9') heißen. Es funzt aber nicht mit führenden Nullen, was aber kein Problem sein sollte.
Den Fehler in der Bedingung hatte ich ja bereits korrigiert
Die funktion sollte aber problemlos mit führenden Nullen funktionieren, wo ist denn dein Problem? Oder möchtest du, dass eine führende 0 ignoriert oder als Anfang einer Zahl in Oktalschreibweise intepretiert wird?
@net: Dein Code hat nichts mit führenden Nullen zu tun
Und kopier bitte nicht meine Fehler
-
Neku schrieb:
Und kopier bitte nicht meine Fehler
hab' ich doch nicht. die überflüssigen 'L's sind alle weg
-
net schrieb:
Neku schrieb:
Und kopier bitte nicht meine Fehler
hab' ich doch nicht. die überflüssigen 'L's sind alle weg
Du hast aber auch "< '9'" statt "<= '9'". Kann aber auch Zufall sein
-
Neku schrieb:
Du hast aber auch "< '9'" statt "<= '9'". Kann aber auch Zufall sein
nö, ich hab' einfach deinen code kopiert :p
...und natürlich nicht ausprobiert. wahrscheinlich laufen die meisten codes nicht, die ich poste, weil ich die fast nie ausprobiere
aber der fragesteller soll ja auch noch was zu tun haben
-
Neku schrieb:
Den Fehler in der Bedingung hatte ich ja bereits korrigiert
Die funktion sollte aber problemlos mit führenden Nullen funktionieren, wo ist denn dein Problem? Oder möchtest du, dass eine führende 0 ignoriert oder als Anfang einer Zahl in Oktalschreibweise intepretiert wird?
Ist schon in Ordnung, da ja ein int mit führenden Nullen keinen Sinn macht.
-
Nerd32 schrieb:
Neku schrieb:
Den Fehler in der Bedingung hatte ich ja bereits korrigiert
Die funktion sollte aber problemlos mit führenden Nullen funktionieren, wo ist denn dein Problem? Oder möchtest du, dass eine führende 0 ignoriert oder als Anfang einer Zahl in Oktalschreibweise intepretiert wird?
Ist schon in Ordnung, da ja ein int mit führenden Nullen keinen Sinn macht.
Im Moment werden führende Nullen aber zugelassen