Avatar billede bpuschl Nybegynder
06. oktober 2001 - 17:02 Der er 3 kommentarer og
2 løsninger

Casting af variabler i visual c++

Er der nogle der ved hvordan man caster en TCHAR til en char *?

Avatar billede wisen Nybegynder
08. oktober 2001 - 08:02 #1
Det lader sig vist ikke umiddelbart gøre, TCHAR er defineret som en wchar_t, som er 16 bit, mens en char er 8 bit....

/Wisen
Avatar billede soepro Nybegynder
08. oktober 2001 - 09:22 #2
Du kan ikke caste en TCHAR til en char * - T-CHAR er som wisen skriver egentlig en \"short\"/double-byte. Men ... følgende er muligt/tilladt:

TCHAR t = \'c\';
char  a = (char)t;
char  s[12] = \"\";
int  b = (int)t;

hvis du vil have indholdet \"hældt\" over i en char *, kan du f.eks. bruge sprintf;

sprintf(s, \"%c\", (char)t);

Jeg mener at TCHAR er beregnet til Double-character byte sets (typisk japanske/kinesiske tegn) - og d.o. laver ikke nogen konvertering når du laver char\'en. Under C++ Builder understøttes DCBS af AnsiString datatypen - og den har overloaded alle funktioner/operander så man kan bruge TCHAR variabler direkte - noget tilsvarende er formentlig muligt under MVC.
Avatar billede chime9 Nybegynder
12. oktober 2001 - 15:38 #3
Først det grundlæggende: Når man laver C++ programmer til windows er der to måder at repræsentere tekststrenge: ANSI og UNICODE. Ansi er den gammeldags som alle kender, hvor hvert tegn fylder 8 bit. Unicode er en nyere standard hvor tegnene fylder 16 bit (eller kan være mappet til 8 bit gennem en specielt map, f.eks. UTF8 eller ISO-8859. I Unicode er der plads til alle mulige sprogs specielle tegn, som ovenfor antydet. Når du vælger at oversætte et program, kan du vælge om du vil bruge unicode eller ansi. Dette påvirker både visse interne typedefinitioner, API definitioner og de runtime libraries der linkes med.
Omkring TCHAR: TCHAR er en makro der skifter betydning afhængig af om du kører Unicode eller ANSI. Hvis du oversætter uden unicode (så du bruger 8 bits tegn) så er TCHAR det samme som char. Hvis du oversætter med UNICODE, så er TCHAR det samme som wchar_t (som er 16 bit bred). Det betyder for det første at når man vælger at bruge TCHAR fremfor de grundlæggende typer char og wchar_t, så er det fordi man ønsker at kunne oversætte programmet til både Unicode og non-unicode.
Når programmet oversættes uden brug af UNICODE, så kan du direkte assigne en TCHAR* til en char* (jeg antager du har glemt en stjerne i dit oprindelige spørgsmål). Men når du oversætter til Unicode, så dutter den ikke mere. Det er inkompatible typer og de kan ikke umiddelbart oversættes til hinanden. Selvfølgelig kan det lade sig gøre at gøre noget, men hvad det rigtige er afhænger i allerhøjeste grad af hvad din TCHAR streng faktisk indeholder.
Men du vil vel stadig gerne have lidt hjælp til hvordan du skal komme videre. For det første skal du gøre løsningen afhængig af om du oversætter med unicode. Det kan du gøre med
#ifdef _UNICODE
hvis det ikke er unicode kan du bare assigen din TCHAR* til din char*. Hvis det er Unicode, kan du jo til at starte med anateg at det der står i din Unicode streng er i Latin1 tegnsættet (som er det mest anvendte tegnsæt i vesten). Her det så heldig at du blot kan tage de low-order 8-bit i hvert 16 bit tegn og assigne til din char streng. Så har du noget der ser fornugtigt ud. Men hvis Unicode strengen ikke er Latin1, så får du sludder.
Håber det hjælper. Jeg kan ikke blive mere præcis uden mere information.
Avatar billede soepro Nybegynder
12. oktober 2001 - 15:42 #4
chime9 >> selvfølgelig unicode, ikke DBCS.
Avatar billede bpuschl Nybegynder
15. oktober 2001 - 08:16 #5
Når jeg læser fra registry får jeg returneret en TCHAR som jeg skal benytte i en spawn kommando. Grunden til at jeg ikke kunne bruge TCHAR (og jeg ville caste den), var at jeg kaldte den forkerte spawn kommando. Jeg har fundet det rigtige nu. Tak for besvarelserne. De var gode.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester