lettura facile

Le stringhe di byte in Python

In Python le stringhe di byte sono una collezione di byte, simili a caratteri ma usate per rappresentare dati non solo testuali.

Cos'è una stringa di byte? Immagina una stringa di byte come una fila di caselle, ognuna delle quali contiene un piccolo messaggio. Questi messaggi sono i byte, che possono rappresentare una vasta gamma di dati, non solo testo, ma anche immagini, suoni, o qualsiasi altro tipo di informazione che può essere codificata in formato digitale.

Per creare una stringa di byte in Python, si usa il prefisso b davanti a una stringa normale.

Ad esempio, b"Ciao" è una stringa di byte che rappresenta la parola "Ciao".

messaggio = b"Ciao"

Se interroghi il tipo di dato di questa stringa tramite la funzione type()

print(type(messaggio))

Python ti restituisce la classe <class 'byte'> anziché la classe <class 'str'> delle stringhe di testo.

<class 'byte'>

Qual'è la differenza tra stringhe di byte e stringhe di testo?

La differenza principale tra le stringhe di testo normali (str) e le stringhe di byte in Python sta nel modo in cui i dati vengono memorizzati e gestiti.

Mentre una stringa di testo normale (str) memorizza caratteri come lettere e simboli che leggiamo, una stringa di byte memorizza i dati come una serie di numeri, che corrispondono ai byte. Quindi può memorizzare anche caratteri non visibili e dati non testuali.

A cosa serve? Questo è molto utile, per esempio, quando lavori con file binari come un'immagine o un file audio, oppure quando devi inviare dati attraverso una rete in un formato che non è specificamente testuale. Pensa a una stringa di byte come a una lingua straniera che può essere compresa solo da chi conosce quel particolare codice binario, mentre una stringa di testo normale è come la lingua che parliamo tutti i giorni.

Ecco qualche esempio pratico.

Definisci una stringa di byte e assegnala a una variabile.

messaggio = b"abc"

Ora recupera e visualizza il primo carattere della stringa, quello con indice zero.

print(messaggio[0])

Il linguaggio Python non visualizza il carattere "a" ma la sua rappresentazione sotto forma di byte.

97

Dove 97 è il codice Unicode della lettera "a" dell'alfabeto latino.

Adesso visualizza tutti i byte della stringa e la loro rappresentazione esadecimale tramite un ciclo for.

  1. for item in messaggio:
  2. print(chr(item), item, hex(item))

Questo ciclo stampa i byte equivalenti dei caratteri "a", "b", "c" contenuti nella stringa.

a 97 0x61
b 98 0x62
c 99 0x63

In altre parole, la rappresentazione esadecimale del carattere "a" è x61, quella del carattere "b" è x62, ecc.

A cosa serve la rappresentazione esadecimale dei byte?

 

La conoscenza dei valori esadecimali ti permette di definire la stringa senza indicare i caratteri, usando la sintassi \xhh, dove hh è il valore esadecimale del byte nel codice Unicode.

Questa sintassi è molto utile se devi memorizzare dei dati non testuali o dei caratteri non visibili all'interno della stringa.

Ad esempio, definisci la stessa stringa di byte indicando direttamente i byte nel formato esadecimale.

nuovomessaggio=b"\x61\x62\x63"

Poi stampa il contenuto della variabile.

print(nuovomessaggio)

Python stampa sullo schermo il contenuto equivalente della stringa ed è lo stesso.

b'abc'

Lo stesso accade quando visualizzi la stringa di byte tramite lo slicing.

print(nuovomessaggio[0:3])

b'abc'

Viceversa, quando accedi ai singoli caratteri viene mostrato il codice numerico equivalente

print(nuovomessaggio[0])

97

In questa breve ma essenziale panoramica ti ho spiegato cosa sono le stringhe di byte, a cosa servono e come utilizzarle nel linguaggio Python.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin