2 votes

Métadonnées numériques du fichier d'onde

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 ?

2voto

Błażej Michalik Points 253

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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X