Outils pour utilisateurs

Outils du site


cours:informatique:iot:programmer_internet_des_objets:215_la_serialisation

Table des matières

Cours “Programmer l'Internet des objets” proposé sur la plateforme FUN-MOOC par l'Institut Mines Télécom.

La sérialisation

Sous ce nom barbare se cache la méthode utilisée pour transmettre des données d’un ordinateur à un autre. Une donnée peut être simple (un nombre, un texte) ou plus complexe (un tableau, une structure…). Elle est stockée dans la mémoire de l'ordinateur suivant une représentation qui lui est propre. Par exemple, la taille des entiers peut varier d'une technologie de processeur à une autre, l'ordre des octets dans un nombre peut aussi être différente (little et big endian). Pour des structures complexes comme les tableaux, les éléments peuvent être rangés à différents emplacements de la mémoire.

La sérialisation consiste à transformer une structure de données en une séquence qui pourra être transmise sur le réseau, stockée dans un fichier ou une base de données. L'opération inverse, consistant à reconstruire localement une structure de données, s'appelle désérialisation.

Il existe plusieurs formats pour sérialiser les données. Ils peuvent être binaires mais ceux généralement utilisés sont basés sur des chaînes de caractères. En effet, la représentation ASCII définissant les caractères de base et codée sur 7 bits est commune à l'ensemble des ordinateurs. L'autre avantage du code ASCII est qu'il est facilement lisible et simplifie la mise au point des programmes.

Wikipédia donne ce tableau des codes ASCII datant de 1972 (une éternité en informatique) et recolorisé par nos soins.

Les caractères en orange ne sont pas imprimables. Ils permettent de contrôler la communication des données ou de gérer l'affichage en revenant à la ligne. On les reconnaît car la séquence binaire commence par 00X XXXX. On rappelle que le code ASCII est sur 7 bits ; le bit supplémentaire (bit de parité) conduisant à 1 octet était utilisé pour détecter des erreurs de transmission. Les valeurs de 0x30 à 0x39 codent les chiffres de 0 à 9.

Hexlify

En Python, il existe le module binascii très pratique qui permet de convertir une séquence binaire en une chaîne de caractères ou inversement :

  • hexlify prend un tableau d'octets et le convertit en une chaîne de caractères hexadécimaux plus lisible pour les spécialistes. Cela permet de visualiser n'importe quelle séquence de données.
  • unhexify fait l'inverse. Il prend une chaîne de caractères et la convertit en un tableau d'octets. Cela peut vous faciliter la programmation car, dans votre code, il est plus facile de manipuler des chaînes de caractères.

Dans la suite du cours, nous l'utiliserons pour manipuler des identifiants. Par exemple, ce bout de code illustre l'utilisation de ces fonctions :

mac = lora.mac()
print ('devEUI: ',  binascii.hexlify(mac))
 
# create an OTAA authentication parameters
app_eui = binascii.unhexlify('70 B3 D5 7E D0 03 3A E3'.replace(' ',''))

La fonction lora.mac() retourne un tableau d'octets. La fonction hexlify ligne suivante le convertit en chaîne de caractères pour un affichage plus propre.

Inversement, nous devons affecter une séquence binaire à la variable app_eui. Nous mettons cette séquence hexadécimale en chaîne de caractères. Les espaces offrent plus de lisibilité. Ils sont retirés par la méthode replace et le résultat est converti en binaire.

Quiz

Soit le programme Python3 suivant :

import binascii
 
val = b"\x01\x0234"
ser = binascii.hexlify (val)
print (val, ser)

Dans le code ci-dessus, on affecte à la variable val un tableau d'octets. On rappelle que \xAB permet de coder un octet ayant pour valeur hexadécimal 0xAB.

1-Quelle est la longueur en octets de la variable val ?

3

2-Quelle est la longueur en octets de la variable ser ?

3-Pourquoi cette différence ?

Base 64

cours/informatique/iot/programmer_internet_des_objets/215_la_serialisation.txt · Dernière modification : 2023/05/27 12:23 de yoann