Aller au contenu

Manipuler des données binaires

bytes() : construire une séquence d'octets immuable

print(bytes([65, 66, 67]))       # b'ABC'
print(bytes("été", "utf-8"))  # b'\xc3\xa9t\xc3\xa9'
print(bytes(3))                 # b'\x00\x00\x00'

Chaque octet a une valeur comprise entre 0 et 255. Un texte exige un encodage ; un entier indique une longueur de séquence initialisée à zéro.

Equivalent en C#

byte[] data = { 65, 66, 67 };
byte[] encoded = Encoding.UTF8.GetBytes("été");
ReadOnlyMemory<byte> view = data;
Console.WriteLine(Encoding.UTF8.GetString(view.Span)); // ABC

byte[] est mutable et correspond davantage à bytearray. ReadOnlyMemory<byte> et ReadOnlySpan<byte> interdisent l’écriture par la vue, mais ne rendent pas immuable le tableau partagé. Il n’existe donc pas ici de correspondance exacte avec l’immuabilité de bytes.

bytearray() : construire une séquence d'octets mutable

data = bytearray(b"ABC")
data[0] = 90
print(data)  # bytearray(b'ZBC')

Equivalent en C#

byte[] data = Encoding.ASCII.GetBytes("ABC");
data[0] = 90;
Console.WriteLine(Encoding.ASCII.GetString(data)); // ZBC

Un tableau .NET possède une longueur fixe. bytearray peut aussi changer de taille ; List<byte> est un autre rapprochement lorsque cette capacité est nécessaire.

memoryview() : accéder à un tampon sans copie initiale

memoryview() crée une vue sur les données d'un objet qui expose le protocole tampon. La possibilité d'écrire dépend du tampon sous-jacent.

data = bytearray(b"ABC")
view = memoryview(data)
view[0] = 90
print(data)  # bytearray(b'ZBC')
view.release()

Cette fonction est utile pour traiter des données binaires en limitant les copies.

Equivalent en C#

byte[] data = Encoding.ASCII.GetBytes("ABC");
Span<byte> view = data.AsSpan();
view[0] = 90;
Console.WriteLine(Encoding.ASCII.GetString(data)); // ZBC

Span<T> représente une vue sans copie avec des contraintes de durée de vie. Memory<T> peut être conservé dans un objet et traverser certaines frontières asynchrones. Ces types ne reproduisent pas toutes les possibilités de forme et de format de memoryview.