# I comandi utf8ToInt e intToUtf8 consentono di esplorare il codice (UTF8, simile
# all'ASCII (vedi) usato per codificare numericamente i caratteri (numeri in base 2,
# visualizzati in base dieci):
utf8ToInt("("); utf8ToInt("MaCoSa")
[1] 40
[1]  77  97  67 111  83  97
intToUtf8(40); intToUtf8(c(77,97,67,111,83,97))
[1] "("
[1] "MaCoSa"
# Si possono codificare segretamente i messaggi. Ecco un esempio semplice
# (facilmente "scopribile"): aggiungo 7 ai codici.
utf8ToInt("MaCoSa"); utf8ToInt("MaCoSa")+7
[1]  77  97  67 111  83  97
[1]  84 104  74 118  90 104
cod <- c(84,104,74,118,90,104); intToUtf8(cod);  intToUtf8(cod-7)
[1] "ThJvZh"
[1] "MaCoSa"
# Ecco la codifica (32,33,35-91,93-126) dei caratteri usuali:
intToUtf8( c(32,33,seq(35,91)) )
[1] " !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ["
intToUtf8( seq(93,126) )
[1] "]^_`abcdefghijklmnopqrstuvwxyz{|}~"
utf8ToInt("09AZaz /:@{~")
[1]  48 57   65 90   97 122   32 47   58 64   123 126
# Ecco come sono stati realizzati i comandi Codifica e Decodifica, di cui
# richiamiamo un esempio d'uso:
Codifica(54321, "Un esempio d'uso di R")
[1] "Ml9fnfak{p9hXxnp9h{9$"
Decodifica(54321, "Ml9fnfak{p9hXxnp9h{9$")
[1] "Un esempio d'uso di R"
Sost_Cas = function(seme,n) { set.seed(seme); m=n; if(n<=90 & n>=32) m=sample(32:90)[n-32+1];
           if(n<=126 & n>=97) m=sample(97:126)[n-97+1]; m}
Sost_Cas_inv = function(seme,k) { q=k; for(i in 32:90) if(Sost_Cas(seme,i)==k) q=i;
           for(i in 97:126) if(Sost_Cas(seme,i)==k) q=i; q}
Codifica = function(seme,testo) { x=NULL;
    for(i in 1:nchar(testo)) x=c( x,Sost_Cas( seme,utf8ToInt(substr(testo,i,i)) ) );
    b1=intToUtf8(x); b1 }
Decodifica = function(seme,testo) { y=NULL;
    for(i in 1:nchar(testo)) y=c( y,Sost_Cas_inv( seme,utf8ToInt(substr(testo,i,i)) ) );
    c1=intToUtf8(y); c1 }