wchar_t casten
-
Hi,
ich möchte einen char in einen wchar_t umwandeln, aber auf die Hardcore variante, also OHNE zusatzfunktionen!
Da ich die stdlib nicht mitlinken kann für mein OS projekt kann ich natürlich nicht auf die stdlib zurückgreifen.
In der FAQ hab ich das thema gefunden:
http://www.c-plusplus.net/forum/viewtopic.php?t=39492das hat mir leider net sehr geholfen, da dort eine Funktion benutzt wird aus der stdlib, drum pustekuchen
Kann man auch irgendwie "manuell" casten?
-
caste mit der stdlib ein string "abcdefg..." nach wchar_t und kucke dir an was aus a für eine "zahl" (konstante die ein bestimtes zeichen symboliesiert so wie 65 für 'A' steht im ascii system) geworden ist
wenn du glück hast sind die ascii zeichen in unicode (wchar_t) in der gleichen art angeordent dan dürfe das convertieren leicht fallen
bool is_unicode_to_ascii_convertable(wchar_t w) { const int min = ???; const int max = ???; return w >= min && w <= max; } char ascii_to_unicode(wchar_t w) { const int diff = ???; return w - diff; } void convert(char * destination, size_t destination_size, const wchar_t * source, size_t source_size) { while(destination_size-- && source_size--) { if(is_unicode_to_ascii_convertable(*source)) *destination = ascii_to_unicode(*source) else *destination = /* irgend ein char der die nicht convertierbarkeit symboliesiert */; ++destination; ++source; } }
so in etwa
-
du musst schauen, welchen Zeichensatz wchar_t nutzen soll (am besten ist wohl Unicode Support nach dem UCS-4 Standard, dafür muss wchar_t 32bit groß sein).
Einfaches us-ascii zu konvertieren ist kein Problem, da Unicode ja zu us-ascii kompatibel ist.
Du musst eben nur aufpassen, welche Kodierung char sonst noch nutzt (extended-ascii, ISO 8859-x Zeichensätze oder sogar multibyte-Zeichensätze wie UTF-8).
Vielleicht solltest du mal einen Blick in den Code der libiconv werfen.