J'ai un fichier contenant des octets (je sais, rien de très original).
Je voudrais lire ce fichier, et rajouter un bit 0 tous les 7 bits. Je me
dis que la fonction pack() ou unpack() doit permettre ce genre de
manipulation, mais je ne comprends pas trop comment faire.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jl_morel
Dans l'article <4091f1a0$0$15659$, a dit...
J'ai un fichier contenant des octets (je sais, rien de très original). Je voudrais lire ce fichier, et rajouter un bit 0 tous les 7 bits. Je me dis que la fonction pack() ou unpack() doit permettre ce genre de manipulation, mais je ne comprends pas trop comment faire.
Ça se lit de droite à gauche ! Le premier unpack renvoie une chaîne de caractères 0 et 1, le second unpack decoupe la chaîne en paquets de 7 caractères, le join recolle les morceaux après avoir intercalé des 0 là où il faut, le dernier pack reconstitue la chaîne modifiée.
Attention : pack et unpack travaillent au niveau de l'octet; on ne peut pas remplacer les deux unpack successifs par un seul comme : unpack "(b7)*", $avant Cette dernière instruction renvoie une liste des 7 premiers bits de chaque octets et non pas des paquets de 7 bits consécutifs.
Si votre fichier est important il faudra le traiter par enregistrements dont la longueur est un multiple de 7.
HTH
-- J-L.M.
Dans l'article <4091f1a0$0$15659$626a14ce@news.free.fr>, pbert@hotmail.com a
dit...
J'ai un fichier contenant des octets (je sais, rien de très original).
Je voudrais lire ce fichier, et rajouter un bit 0 tous les 7 bits. Je me
dis que la fonction pack() ou unpack() doit permettre ce genre de
manipulation, mais je ne comprends pas trop comment faire.
Ça se lit de droite à gauche ! Le premier unpack renvoie une chaîne de
caractères 0 et 1, le second unpack decoupe la chaîne en paquets de 7
caractères, le join recolle les morceaux après avoir intercalé des 0 là où
il faut, le dernier pack reconstitue la chaîne modifiée.
Attention : pack et unpack travaillent au niveau de l'octet; on ne peut pas
remplacer les deux unpack successifs par un seul comme :
unpack "(b7)*", $avant
Cette dernière instruction renvoie une liste des 7 premiers bits de
chaque octets et non pas des paquets de 7 bits consécutifs.
Si votre fichier est important il faudra le traiter par enregistrements
dont la longueur est un multiple de 7.
J'ai un fichier contenant des octets (je sais, rien de très original). Je voudrais lire ce fichier, et rajouter un bit 0 tous les 7 bits. Je me dis que la fonction pack() ou unpack() doit permettre ce genre de manipulation, mais je ne comprends pas trop comment faire.
Ça se lit de droite à gauche ! Le premier unpack renvoie une chaîne de caractères 0 et 1, le second unpack decoupe la chaîne en paquets de 7 caractères, le join recolle les morceaux après avoir intercalé des 0 là où il faut, le dernier pack reconstitue la chaîne modifiée.
Attention : pack et unpack travaillent au niveau de l'octet; on ne peut pas remplacer les deux unpack successifs par un seul comme : unpack "(b7)*", $avant Cette dernière instruction renvoie une liste des 7 premiers bits de chaque octets et non pas des paquets de 7 bits consécutifs.
Si votre fichier est important il faudra le traiter par enregistrements dont la longueur est un multiple de 7.