Pourquoi toutes les métadonnées numériques ne sont-elles pas stockées sous forme de caractères ASCII ? Par exemple, pour trouver la fréquence d'échantillonnage, qui commence à l'octet 24, il faut lire quatre octets et effectuer quelques échanges endian et des décalages de bits pour obtenir le nombre réel. Pourquoi ne pas simplement stocker la fréquence d'échantillonnage sous forme de caractères ASCII ?
Réponse
Trop de publicités?Pour les ordinateurs, l'échange d'octets est beaucoup plus facile que l'analyse d'un nombre décimal. Le stockage d'un nombre binaire prend également moins d'espace disque.
Par exemple, pour lire le nombre 0x12345678 à partir d'un tampon :
def read32le_binary(buf):
return buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3]
def read32_text(buf):
n = 0
for i in range(11):
n = 10 * n + buf[i] - '0'
return n
La première fonction lit les données binaires. Elle contient 6 opérations arithmétiques, ce qui est assez rapide.
Sur certains ordinateurs, lorsque l'endianness correspond et que l'unité centrale autorise les lectures de mémoire non alignées, il ne faut que 0 opération arithmétique.
En revanche, la version texte nécessite 48 opérations, ce qui est beaucoup plus. Et pire encore, le code ci-dessus est naïf. Que se passe-t-il si la mémoire contient des caractères autres que des chiffres ? Cela pourrait produire un débordement. Ou si le nombre résultant est plus grand que ce qu'un nombre de 32 bits peut représenter ?
Pour toutes ces raisons, il existe de nombreux formats de fichiers qui font appel à la représentation binaire. Le format texte est souvent utilisé pour les formats de fichiers "plus proches de l'homme", comme le XML pour les documents texte réels.