/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
unicode
Fra : Thomas Jensen


Dato : 16-11-07 13:23

Jeg er ved at lave et program der søger i en liste med ord. For at gøre
en lang historie kort, så er jeg rendt ind i at input kan være både
unicode og alm. ascii. Og helt konkret, så har jeg lidt problemer med at
forstå wchar_t. Fx. brokker gcc sig over

wchar_t str[MAXLEN] = "mælk";

og siger: fejl: wchar_t-array initialized from non-wide string

og ved

wchar_t c = 'æ';

bliver jeg advaret om: advarsel: flerbyte-tegnkonstant

Ja, 'æ' er en flerbyte tegnkonstant - men det er su' da også derfor jeg
læser den ind i en wchar_t! Arghhh!!!

Okay, hvad er en wide string? Og hvordan læser jeg en vilkårlig ascii
tekst ind i en wide string?

Planen er at konvertere programmet til assembler (bare for sjov), så
løsningen er ikke at bruge et højniveau sprog.

--
Thomas Jensen

 
 
Ivan Johansen (16-11-2007)
Kommentar
Fra : Ivan Johansen


Dato : 16-11-07 14:42

Thomas Jensen wrote:
> Jeg er ved at lave et program der søger i en liste med ord. For at gøre
> en lang historie kort, så er jeg rendt ind i at input kan være både
> unicode og alm. ascii. Og helt konkret, så har jeg lidt problemer med at
> forstå wchar_t. Fx. brokker gcc sig over
>
> wchar_t str[MAXLEN] = "mælk";

Det er nok fordi det skal være:
wchar_t str[MAXLEN] = L"mælk";

L'et foran angiver at det er wchar_t.

> og siger: fejl: wchar_t-array initialized from non-wide string
>
> og ved
>
> wchar_t c = 'æ';
>
> bliver jeg advaret om: advarsel: flerbyte-tegnkonstant

Det er nok samme problem. Det skal være:
wchar_t c = L'æ';

> Okay, hvad er en wide string?

Sikkert en Unicode string.

> Og hvordan læser jeg en vilkårlig ascii
> tekst ind i en wide string?

Nu er det så heldigt at ASCII er et subset af Unicode, så hvis du har et
ASCII tegn:
char ch = 'A';

konverteres det nemt til Unicode:
wchar_t wch = ch;

Bemærk dog at 'æ' ikke findes i ASCII, så du er afhængig af en udvidet
tegntabel. Konverteringen bliver derfor operativsystemspecifik og du
skal have styr på hvilken tegntabel du bruger.

Ivan Johansen

Michael Rasmussen (16-11-2007)
Kommentar
Fra : Michael Rasmussen


Dato : 16-11-07 16:05

On Fri, 16 Nov 2007 14:42:16 +0100
Ivan Johansen <NG5@Padowan.remove.dk> wrote:

> Bemærk dog at 'æ' ikke findes i ASCII, så du er afhængig af en
> udvidet tegntabel. Konverteringen bliver derfor
> operativsystemspecifik og du skal have styr på hvilken tegntabel du
> bruger.
En helt anden ting er så den, at man virkeligt skal have styr på sine
pointere, hvis man reference overfører wchar_t, og slige konstruktioner
er ikke trivielle:
for (i=0; *wchar_t_ptr; ++i) {
wchar_t_ptr[i]
}

--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.

Thomas Jensen (16-11-2007)
Kommentar
Fra : Thomas Jensen


Dato : 16-11-07 18:35

Den Fri, 16 Nov 2007 14:42:16 +0100 skrev Ivan Johansen:


> Det er nok fordi det skal være:
> wchar_t str[MAXLEN] = L"mælk";
>
> L'et foran angiver at det er wchar_t.

Super! Det giver mening.


> Bemærk dog at 'æ' ikke findes i ASCII, så du er afhængig af en udvidet
> tegntabel. Konverteringen bliver derfor operativsystemspecifik og du
> skal have styr på hvilken tegntabel du bruger.

Yes. Den evige plage, som jeg indtil nu har ignoreret i mit program (et
program der finder ord til brug i krydsord). Jeg vil gerne lade brugeren
lave sin egen database over ord der kan bruges, men det betyder jeg ikke
kender den tegntabel der vil blive brugt... Jeg skal vist lige tænke lidt
over hvad jeg gør...

--
Thomas Jensen

Søg
Reklame
Statistik
Spørgsmål : 177420
Tips : 31962
Nyheder : 719565
Indlæg : 6407873
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste