Newsgroup: it.comp.lang.c
Titolo: istruzione per ricavare codice ascii

Salve.
Dovrei risolvere un problemino.... on una funzione,devo trasformare il
valore di un carattere nel suo corrispettivo valore numerico del codice
ascii. 
Ci dovrebbe essere un' istruzione del C chiamata  "ascii(x)" in cui 'x'
rappresenta il valore da far corrispondere al valore ascii.
Dovrebbe trovarsi nella libreria    ctype.h    ma a me non funziona.
Chi mi può dire cosa sbaglio, e se c'è un'istruzione equivalente?
grazie  
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ascii.
Un carattere e' gia' di tipo numerico: 'A' corrisponde a 65.
Cosa devi fare di preciso?
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Chi mi può dire cosa sbaglio, e se c'è un'istruzione equivalente?
non serve nessuna funzione!
Tommy

 C:>iao Angelo
Innanzi tutto grazie per avermi risposto
mi rendo conto di non essere stato troppo chiaro
allora il mio problema è precisamente questo:
                      ||
                      ||
                      ||
                     \  /
                      \/
In questo modulo dovete implementare una funzione 
int hash(char *word, int dim) 
che trasforma la stringa alfabetica word in 
un numero compreso tra 0 e dim-1. 
La funzione da implementare deve essere la seguente. Sia 
w = w0 w1 ... wk 
la stringa in input. La funzione hash è così definita, dove ascii(c)
denota il codice ascii del carattere c: 
hash(w) := (ascii(w0) x 256^0 + ascii(w1) x 256^1 + ... + ascii(wk) x
256^k) mod dim . 
Nell'implementazione è opportuno fare uso delle seguenti semplici
proprietà del modulo: 
(a + b) mod m = (a mod m + b mod m) mod m 
(a x b) mod m = (a mod m x b mod m) mod m 
DELUCIDAZIONI  
ho un vettore di caratteri puntato da '*word' ,in cui è memorizzata la
parola da trasformare in numero,
La parola può essere composta da numeri e lettere, ed ogni parola che
memorizzo nel mio vettore di caratteri(chiaramente memorizzo una parola e
la trasformo in numero,e solo dopo memorizzerò la seconda parola andando a
sovrascrivere quella precedente)deve essere trasformata in un numero.
La variabile 'dim' per ora non sò quanto debba essere.fate conto sia 7.
Grazie mille in anticipo. 


 256^k) mod dim . 
int hash(cahr* word, int dim, int size)
{
   int retVal = 0;
    for(idx = 0; idx < size; idx++)
    {
        retVal += word[idx]*pow(256, idx);
    }
   return  retVal%dim;
}
Il codice di sopra e' pessimo  non  fosse altro per il fatto che pow()
restituisce un double e 256^x ha il difetto di assumere valori grandi,
che potrebbero non "entrare" in un int, anche per valori modesti di x.
La versione decente del codice (che sfrutta  le proprieta' del modulo)
spetta a te. :-)
HTH


 256^k) mod dim . 
qualcosa tipo questo dovrebbe andare
int hash(char *word, int dim)
{
   char *p=word;
   int val=0;
   while (*p) p++;
   while (--p >= word) val=(*p+(val<<8))%dim;
   return val;
}
cerca di capire da solo come funziona.
ciao,
g.

 SLASH-SNAKEPIT wrote:




Ancora nessuno mi č riuscito a capire.
probabilmente sono poco chiaro.
Ora cercherň di essere il piů esplicito possibile
IL MIO PROBLEMA STA NEL FATTO CHE:
ESEMPIO      ho la parola         'casa'
la formula che devo usare č questa 
ris_num := (ascii(w0) x 256^0 + ascii(w1) x 256^1 + ... + ascii(wk) x
256^k) mod dim 
ris_num := (ascii(c)x 256^0 + ascii(a) x 256^1 + ... + ascii(a) x 256^3)
mod dim 
 
ora 'ascii(x)'  dovrebbe essere un'istruzione che trasforma x nel suo
valore numerico del codice ascii   es.   ascii(a) = 97   
ma non mi funziona
per questa istruzione uso la libreria ctype.h 
Chi mi sa dire in cosa sbaglio e/o se c'č un'istruzione del C che
equivalente?


 un'istruzione del C che equivalente?
'a' in C e' un numero e su molto computers 97.
non serve una funzione, prova:
printf("%d\n",'a');
stampera' 97.
se invece di %d metti %c ad indicare che e' un carattere stampera' invece
'a'.
ora se devi fare:
ascii('a') * 10
basta che fai:
'a' * 10
ovviamente 'a' puo' essere messo in una var:
char a = 'a';
a*10
non usare ascii() ed hai risolto il tuo problema!
Tommy

 probabilmente sono poco chiaro.
No.
Il tuo problema (scusa se te lo dico) e' che apparentemente
non conosci i tipi di dato del C e il cast implicito.
NON HAI BISOGNO DI NESSUNA FUNZIONE ascii().
La funzione ascii() viene usata nella descrizione del problema,
per farti capire cosa devi fare, ma non e' necessaria nel
programma C.
Se hai una stringa di caratteri terminata dal
carattere nullo, ad esempio:
char *S;
S = malloc(10);
strcpy(S,"Ciao");
A questo punto S[0]='C', S[1]='i', ..., S[4]=0 (indica la fine
della stringa).
Se tu in un programma scrivi una operazione
aritmetica che coinvolge dei caratteri,
come ad esempio 'x' o in questo caso S[2],
(ma non "c", che non e' un carattere, ma una stringa lunga 1),
il carattere viene sostituito col suo codice ASCII, per esempio,
'A' vale 65, quindi se scrivi
int p;
p = 2 + 'A';
allora p vale 2+65 = 67.
Cosi' come se scrivi p = 100*S[0]+2;
ottieni p=4302 perche'  S[0]='C' e 'C'  "vale"  67.
((Tra l'altro non mi sembra che esista una funzione ascii()
in ctype. Al massimo toascii() che se vuoi puoi usare,
anche se di fatto penso che faccia un mask per eliminare
il bit alto dal carattere. Quindi rischia di convertire i caratteri
accentati in altri caratteri che non c'entrano nulla....))
ciao.
g.