Differenze tra le versioni di "Individuare i valori costituenti i caratteri tipo UTF-8 di lettere localizzate"

Da Gambas-it.org - Wikipedia.
Riga 11: Riga 11:
 
   Dim bb As Byte[]   
 
   Dim bb As Byte[]   
 
        
 
        
  <FONT Color=gray>' ''Carichiamo in un Vettore di tipo "Byte[]" tutti i valori che compongono'' 
+
  <FONT Color=gray>' ''Carichiamo in un Vettore di tipo "Byte[]" tutti i valori che compongono e rappresentano il carattere contenuto nella variabile di tipo "String":''</font>
' ''e rappresentano il carattere contenuto nella variabile di tipo "String":''</font>
 
 
   bb = Byte[].FromString(s)   
 
   bb = Byte[].FromString(s)   
 
            
 
            
Riga 38: Riga 37:
 
===Uso dei ''Puntatori''===
 
===Uso dei ''Puntatori''===
 
Questa modalità prevede la lettura dell'area di memoria puntata dalla variabile stringa contenente la lettera localizzata:
 
Questa modalità prevede la lettura dell'area di memoria puntata dalla variabile stringa contenente la lettera localizzata:
Private s As String
 
 
 
 
  '''Public''' Sub Main()   
 
  '''Public''' Sub Main()   
 
    
 
    
Riga 47: Riga 43:
 
   Dim b1, b2 As Byte
 
   Dim b1, b2 As Byte
 
   
 
   
  s = "è"
+
  <FONT Color=gray>' ''Generiamo una variabile di tipo Puntatore che punta a un'area di memoria contenente i valori costituenti la lettera localizzata "è":''</font>
 
+
   p = Alloc("è")
  <FONT Color=gray>' ''Generiamo una variabile di tipo Puntatore che punta all'indirizzo di memoria della variabile di tipo Stringa contenente il valore "è":''</font>
 
   p = VarPtr(s)
 
 
      
 
      
 
  <FONT Color=gray>' ''Leggiamo il 1° byte dell'area di memoria puntata dal Puntatore e la mostriamo in console:''</font>
 
  <FONT Color=gray>' ''Leggiamo il 1° byte dell'area di memoria puntata dal Puntatore e la mostriamo in console:''</font>
 
   b1 = Byte@(p)
 
   b1 = Byte@(p)
   Print Hex(b1)
+
   Print Hex(b1);;
 
    
 
    
 
  <FONT Color=gray>' ''Leggiamo il 2° byte dell'area di memoria puntata dal Puntatore e la mostriamo in console:''</font>
 
  <FONT Color=gray>' ''Leggiamo il 2° byte dell'area di memoria puntata dal Puntatore e la mostriamo in console:''</font>
 
   b2 = Byte@(p + 1)  
 
   b2 = Byte@(p + 1)  
   Print Hex(b2)
+
   Write Hex(b2)
 
+
  Print
 +
 
  <FONT Color=gray>' ''Vediamo in console il combinato risultato delle due letture:''</font>
 
  <FONT Color=gray>' ''Vediamo in console il combinato risultato delle due letture:''</font>
   Print Chr(b1); Chr(b2)   
+
   Print Chr(b1); Chr(b2)
    
+
   
 +
   Free(p) 
 +
 
  '''End'''
 
  '''End'''
  
Riga 71: Riga 68:
 
Questa modalità prevede un uso del tutto inusuale della funzione di dereferenziazione "Pointer@()", utilizzata solitamente per dereferenziare un ''Puntatore a Puntatore'': nel suo unico argomento verrà posta la variabile di tipo Stringa contenente la lettera localizzata.
 
Questa modalità prevede un uso del tutto inusuale della funzione di dereferenziazione "Pointer@()", utilizzata solitamente per dereferenziare un ''Puntatore a Puntatore'': nel suo unico argomento verrà posta la variabile di tipo Stringa contenente la lettera localizzata.
 
<BR>Ciò nella considerazione che la variabile di tipo Stringa punta essa stessa ad un'area di memoria.
 
<BR>Ciò nella considerazione che la variabile di tipo Stringa punta essa stessa ad un'area di memoria.
  '''Public''' Sub Main()
+
'''Public''' Sub Main()
 
   
 
   
 
   Dim car, s, s1, s2 As String
 
   Dim car, s, s1, s2 As String
Riga 87: Riga 84:
 
   s2 = Left(s, 2)
 
   s2 = Left(s, 2)
 
    
 
    
  <FONT Color=gray>' ''Si trasformerà dunque ciascuna coppia di lettere nel corrispondente valore decimale:''</font>
+
  <FONT Color=gray>' ''Si trasformerà dunque ciascuna coppia di lettere nel corrispondente valore decimale, ottenendo così la lettera localizzata "è":''</font>
   Print #fl, Chr(Val("&" & s1)) & Chr(Val("&" & s2))
+
   Print Chr(Val("&" & s1)) & Chr(Val("&" & s2))
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 95: Riga 92:
  
 
=Note=
 
=Note=
[1] Vedere anche questa pagina della Wiki: [[Conversione_di_due_valori,_costituenti_un_carattere_speciale,_nella_sua_rappresentazione_grafica|Conversione di due valori, costituenti un carattere speciale, nella sua rappresentazione grafica]]
+
[1] Vedere anche le seguenti pagine della Wiki:
 +
<BR>* [[Conversione di due valori, costituenti un carattere speciale, nella sua rappresentazione grafica]]
 +
<BR>* [[Individuare i valori costituenti i caratteri tipo UTF-8 di lettere localizzate]]

Versione delle 06:15, 11 mag 2023

Come è noto, ogni carattere ASCII che ha un codice da 0 a 127 occupa un byte, invece set di caratteri come UTF-8 con lettere localizzate del tipo "à", "è", "é", "ì", "ò", "ù" e simili richiedono due o più valori del codice ASCII esteso. [Nota 1]

E' possibile individuare tali valori costituenti le lettere localizzate mediante almeno quattro modalità.


Uso di un Vettore di tipo Byte[]

Questa modalità è molto semplice. Facciamo un esempio con una lettera costituita da due caratteri:

Public Sub Main()  
     
 Dim s As String = "è"  
 Dim bb As Byte[]  
     
' Carichiamo in un Vettore di tipo "Byte[]" tutti i valori che compongono e rappresentano il carattere contenuto nella variabile di tipo "String":
 bb = Byte[].FromString(s)  
          
' Quindi li vediamo nella console:
 Print Hex(bb[0]), Hex(bb[1])  
     
' Procediamo con la controprova:
 Print Chr(bb[0]); Chr(bb[1])  
     
End


Uso della funzione "Asc()"

Anche quest'altra modalità è abbastanza breve:

Public Sub Main()  
 
 Print Hex(Asc("è", 1)), Hex(Asc("è", 2))
 
' Procediamo con la controprova:
 Print Chr(Asc("è", 1)); Chr(Asc("è", 2))
 
End


Uso dei Puntatori

Questa modalità prevede la lettura dell'area di memoria puntata dalla variabile stringa contenente la lettera localizzata:

Public Sub Main()  
 
' Immagazziniamo i valori che compongono la lettera "è" nella memoria mediante il suo assegnamento in una coerente variabile di tipo Stringa:
 Dim p As Pointer  
 Dim b1, b2 As Byte

' Generiamo una variabile di tipo Puntatore che punta a un'area di memoria contenente i valori costituenti la lettera localizzata "è":
 p = Alloc("è")
    
' Leggiamo il 1° byte dell'area di memoria puntata dal Puntatore e la mostriamo in console:
 b1 = Byte@(p)
 Print Hex(b1);; 
 
' Leggiamo il 2° byte dell'area di memoria puntata dal Puntatore e la mostriamo in console:
 b2 = Byte@(p + 1) 
 Write Hex(b2)
 Print

' Vediamo in console il combinato risultato delle due letture:
 Print Chr(b1); Chr(b2)

 Free(p)  

End


Usando una funzione di dereferenziazione sulla variabile di tipo Stringa

Mostriamo anche questa quarta modalità, che pur essendo la più breve, restituisce però un risultato da ripulire da alcuni dati che non interessano ai nostri fini, e quindi è da interpretare.

Questa modalità prevede un uso del tutto inusuale della funzione di dereferenziazione "Pointer@()", utilizzata solitamente per dereferenziare un Puntatore a Puntatore: nel suo unico argomento verrà posta la variabile di tipo Stringa contenente la lettera localizzata.
Ciò nella considerazione che la variabile di tipo Stringa punta essa stessa ad un'area di memoria.

Public Sub Main()

 Dim car, s, s1, s2 As String
 
 car = "è"

 s = Pointer@(car)
  
' Il risultato è costituito dall'indirizzo di memoria della stringa di valori ed alla fine, a destra, dai valori che cerchiamo.
' I  valori costituenti la lettera "è" sono posti in un ordine inverso, ossia così:  A8C3. Quindi raccogliamo le ultime 4 lettere.
 s = Right(s, 4)
  
' Poiché è necessario invertire i due valori esadecimali, si raccoglieranno delle quattro lettere dapprima le ultime due, poi le prime due:
 s1 = Right(s, 2)
 s2 = Left(s, 2)
  
' Si trasformerà dunque ciascuna coppia di lettere nel corrispondente valore decimale, ottenendo così la lettera localizzata "è":
 Print Chr(Val("&" & s1)) & Chr(Val("&" & s2))

End


Note

[1] Vedere anche le seguenti pagine della Wiki:
* Conversione di due valori, costituenti un carattere speciale, nella sua rappresentazione grafica
* Individuare i valori costituenti i caratteri tipo UTF-8 di lettere localizzate