CLASSE READ/WRITE BIT À BIT DANS UN FICHIER À N'IMPORTE QUELLE POSITION DU BIT
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 2018
-
10 juin 2007 à 08:55
cs_yvesyves
Messages postés561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 octobre 2010
-
10 juin 2007 à 09:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_yvesyves
Messages postés561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 octobre 2010 10 juin 2007 à 09:55
Pour répondre à Willi :
-On écrase si on ne se trouve pas à la fin du fichier sinon on écrit puis il n'y a rien à remplacer. Par exemple :
11100001 on insére 101 à la position 3 et on obtient 11110101. Si la fin du fichier est atteinte il y a juste à écrire à la suite.
Cas particulier :
On commence à 0 au lieu de 4 car il n'est pas question d'insérer des 0 entre la fin du fichier et la position demandée. Cela fausserait les valeurs stockées.
Enfin pourquoi 10110000 et pas 00001011. Car les bits que l'on écrit ne sont pas des octets mais des bits donc on commence à écrire à la position la plus faible. On ne parle plus d'octets dans cette classe. Ensuite on pourra écrire en 4ème position la suite (si l'on se trouve dans une boucle) 10110101.
cs_Patrice99
Messages postés1221Date d'inscriptionjeudi 23 août 2001StatutMembreDernière intervention 9 septembre 2018 10 juin 2007 à 09:42
Ca ne serait pas mieux d'utiliser une structure de champ de bits sérialisable de façon classique ? Comme ça tu aurais à la fois les fonctions classiques de sérialisation de .Net et quand même l'accès à chaque bit. Lorsque je relis ta phrase "Comme je travaille en ce moment sur les algorithmes de programmation, il m'a été fastidieux de perdre mon temps à mettre en place des systèmes complexes qui m'ont finalement brouillé. D'où l'idée de créer cette classe", je n'en retire strictement aucun argument, pas le moindre bit d'information quand à la nécessité qu'il y aurait d'accéder à chaque bit, tu devrais expliciter un peu. Par exemple, si tu veux manipuler les couleurs de pixel, les champs de bits te permettent d'accéder, au choix, à chaque composante RVB indépendamment, ou bien au code couleur directement.
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 10 juin 2007 à 08:55
"Ainsi on peut insérer la valeur 10100 à partir de la position 15 sans modifier les bits précédents ou suivants. Les bits écrit remplacent ceux déjà présent où rajoute si l'on se trouve à la fin du flux."
=> Alors on écrase ou pas ? c'est ambigüe ton explication :)
Cas particuliers :
-Si le fichier est vide est que vous positionner le pointeur à 4, la lecture commencera à 0 quand même.
=>Pourquoi ne pas insérer 4 octets à 0 ou une autre valeur par exemple un espace (choix de l'utilisateur) ?
-Si le nombre de bits inférieur à 8 est à écrire : bits à ecrire en fin de flux pour terminer : 1011, écrit : 10110000
=>Pourquoi 1011 devient 10110000 et pas plutot 00001011 ? Pour moi 1011 correspond à 0000 1011.
10 juin 2007 à 09:55
-On écrase si on ne se trouve pas à la fin du fichier sinon on écrit puis il n'y a rien à remplacer. Par exemple :
11100001 on insére 101 à la position 3 et on obtient 11110101. Si la fin du fichier est atteinte il y a juste à écrire à la suite.
Cas particulier :
On commence à 0 au lieu de 4 car il n'est pas question d'insérer des 0 entre la fin du fichier et la position demandée. Cela fausserait les valeurs stockées.
Enfin pourquoi 10110000 et pas 00001011. Car les bits que l'on écrit ne sont pas des octets mais des bits donc on commence à écrire à la position la plus faible. On ne parle plus d'octets dans cette classe. Ensuite on pourra écrire en 4ème position la suite (si l'on se trouve dans une boucle) 10110101.
10 juin 2007 à 09:42
10 juin 2007 à 08:55
=> Alors on écrase ou pas ? c'est ambigüe ton explication :)
Cas particuliers :
-Si le fichier est vide est que vous positionner le pointeur à 4, la lecture commencera à 0 quand même.
=>Pourquoi ne pas insérer 4 octets à 0 ou une autre valeur par exemple un espace (choix de l'utilisateur) ?
-Si le nombre de bits inférieur à 8 est à écrire : bits à ecrire en fin de flux pour terminer : 1011, écrit : 10110000
=>Pourquoi 1011 devient 10110000 et pas plutot 00001011 ? Pour moi 1011 correspond à 0000 1011.
++