PDA

Visualizza la versione completa : [C/GTK] Stringhe unicode


Girildo
28-06-2010, 10:07
Salve a tutti,
sto realizzando un programma che faccia da convertitore tra numeri greci e numeri arabi decimali.
Per quanto riguarda l'interfaccia grafica e l'immissione dei caratteri tutto torna.
È (solo :mame: ) la funzione che deve di fatto convertire a darmi problemi.
Posto il codice:

GtkWidget *risultato, *testo;
gunichar *a;

int finale = 0;

void calcola()
{
guint lungh;
int i;
gchar *num;
lungh = GTK_ENTRY(testo)->text_length;
for(i = lungh-1; i >= 0; i--)
{
switch (a[i])
{
case 45518: //alfa
finale += 1;
break;
case 45774: //beta
finale += 2;
break;
case 46030: //gamma
finale += 3;
break;
case 46286: //delta
finale += 4;
break;
case 46542: //epsilon
finale += 5;
break;
case 39887: //stigma
finale += 6;
break;
case 46798: //zeta
finale += 7;
break;
case 47054: //eta
finale += 8;
break;
case 47310: //theta
finale += 9;
break;
case 47566: //iota
finale += 10;
break;
case 47822: //kappa
finale += 20;
break;
case 48078: //lambda
finale += 30;
break;
case 48334: //mi
finale += 40;
break;
case 48590: //ni
finale += 50;
break;
case 48846: //xi
finale += 60;
break;
case 49102: //omicron
finale += 70;
break;
case 32975: //pi
finale += 80;
break;
case 39375: //qoppa
finale += 90;
break;
case 33231: //rho
finale += 100;
break;
case 33743: //sigma
finale += 200;
break;
case 33999: //tau
finale += 300;
break;
case 34255: //upsilon
finale += 400;
break;
case 34511: //phi
finale += 500;
break;
case 34767: //chi
finale += 600;
break;
case 35023: //psi
finale += 700;
break;
case 35279: //omega
finale += 800;
break;
case 41: //sampi
finale += 900;
break;
}
}
sprintf(num, "%d", finale);
gtk_label_set_text(risultato,num);
finale = 0;
}

Quando inserisco un solo carattere nel widget entry, funziona tutto, per esempio inserendo (alpha), la variabile finale restituisce effettivamente 1.
Quando però inserisco più di un carattere, il corrispettivo codice Unicode cambia, a seconda della stringa inserita. Quindi l'alpha non avrà più un valore di 45518.
Per esempio:
input = β (=45774). Risultato finale = 2.
input = ββ (=1815352320 la prima e -1295076658 la seconda). Risultato finale = 0.

Sapete spiegarmi come mai, e, eventualmente, come risolvere? :)

Ne approfitto anche per chiedere: è possibile, nella funzione g_signal_connect passare più di un argomento alla funzione di callback?

Grazie.
Girildo.

Loading