begin process at 2012 02 14 19:23:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Algorithme

 > 

Compression & Cryptage

 > 

savoir l'état des bits d'un octet


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

savoir l'état des bits d'un octet

samedi 18 novembre 2006 à 11:25:08 | savoir l'état des bits d'un octet

nardelmouk

souhaitant faire un petit algorithme de compression, j'avais vu que touts les lettres de l'alphabet ne prenaient pas plus de 5 bits d'un octet donc je vous  fait un exemple : a= 00000 , b = 00001 etc ... donc "abcd" ferait 000000000100010000110000 soit 3 octet. bon ça , c'est pour la compression.
mais après , comment faire pour que quand je prend un octet dans le fichier, je puisse voir les bits qu'il y a pour retrouver les caracteres ?
merci d'avance.
samedi 18 novembre 2006 à 11:54:18 | Re : savoir l'état des bits d'un octet

casy

Membre Club

Il faut simplement que tu fasse l'inverse de ce que tu fait à la compression.

Il faut que tu isole chaque groupe de 5 bits (dont certains seront répartis sur 2 octets).
Ensuite il te faut comme à la compression, une table de correspondance entre lecaractère réel et le caractère comprimé.

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
samedi 18 novembre 2006 à 12:05:53 | Re : savoir l'état des bits d'un octet

nardelmouk

ok, merci mais juste un autre petit truc,  coment faire pour que quand je prends chaque octet, au niveau programmation, concaténer dans une string tous les bits ?
merci pour l'autre réponse
samedi 18 novembre 2006 à 12:17:30 | Re : savoir l'état des bits d'un octet

casy

Membre Club
VB ne sait pas travailler sur les bits, il ne travaille que sur des octets.
Il faut donc faire des masques, des décalages, ...

Pour ton exemple :
Pour le premier octet, il sera égal aux 5 bits du premier caractère compressé auquels tu devra ajouter (addition) les 3 premiers bits de second caractère (donc masque) décalé (décalage ou multiplication) de 5 bits.
Le second octet prendra les 4eme et 5eme bits (donc masque) du second caractère, décalés pour venir en premier et second bit + les 5 bits du 3eme caractere décalés pour venir à partir du 3eme bit, + le premier bit du 4eme caractère dcalé pour venir en 8eme place.

Même si ton algo parait simple, la mise à oeuvre peut paraitre complexe. E toi de bien y réfléchir pour quelle ne devienne pas compliquée.

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
samedi 18 novembre 2006 à 13:24:01 | Re : savoir l'état des bits d'un octet

jack

Administrateur CodeS-SourceS
Réponse acceptée !
Salut
Reprenons les bases. D'ailleurs, je te conseille de jeter un oeil sur une ou des sources qui parlent de conversions de Base qui manupilent les Bytes (ou Octets) et les Bits.

Un Octet est composé de 8 bits (numérotés de 0 à 7).
Un Octet, dans sa représentation décimale peut prendre des valeurs de 0 à 255, ou 00 à FF en Hexa.
Pour écrire le Bit n°X d'un Octet, il te suffit de calculer 2^X (avec X de 0 à 7)
Pour lire le Bit n°X d'un Octet, il faut tester si Octet And 2^X = Octet

Ensuite, tu parles de String (Chaine).
Les Strings sont composés de caractères.
Chaque caractère est un Octet.

Donc, dans ton cas où tu veux coder les caractères sur 5 bits et pas 8, il faut abandonner la représentation alphabétique des caractères d'une String et travailler uniquement sur les valeurs numériques des Octets.
Dans ton exemple, si tu veux coder 'abc', cela te donnera la suite de 15 Bits suivants (la représentation standard des bits est toujours avec le bit de poids faible à droite et le bit de poids fort à gauche) :
Séparés par paquet de 5 bits : 000100000100000
La même chose en paquets de 8 bits (1 Octet) : x0001000 00100000
Le problème que tu auras, c'est de passer les 3 premiers bits du 'b' sur le premier octet et les 2 restant au début de l'octet suivant.
Le x correspond au premier bit du prochain caractère (même punition).
Ca va pas être du gateau, mais faisable.
Il faudra prendre en compte aussi que, à la relecture, tu ne pourras lire que des Octets, donc des multiples de 8, donc les derniers Bits seront peut-être inutilisés. Dans le pire des cas, tu n'auras qu'un seul Bit intéressant dans le dernier Octet, les 7 suivants seront restés à 0. Or, dans ta table de caratères, '00000' représente la lettre 'a'.
Il faut donc que tu sacrifies le '00000' pour qu'il ne représente rien et commencer le 'a' à '00001' sinon, tu risques de retrouver des 'a' fantômes à la fin.

En VB, il faut impérativement que tu travailles avec des tableaux de Byte (Octet) pour pouvoir changer d'octet de manière numérique.
Il va falloir :
- décortiquer la chaine d'origine pour retrouver la représentation des 5 bits en fonction de la lettre rencontrée. Un tableau initialisé au début de ton projet devrait faire l'affaire
- définir ne nombre d'Octets (de 8 bits) dont tu auras besoin : Il te suffit de calculer : NombreCaratères * 5 / 8 et l'arrondir à la valeur supérieure
- Ecrire : Ca va être un astucieux mélange de boucle For-Next et d'incrémentation.

Conclusion : Oui, c'est faisable, mais avant tout, il faut que tu te familiarises avec l'écriture et la lecture des Bits dans un Octet sur des exemples simples avant de te lancer dans ce programme.
Fabrique-toi et met au point ces procédures :
Sub BitEcrit (monOctet As Byte, NoBit As Integer, Etat As Boolean)
Sub BitLit (monOctet As Byte, NoBit As Integer, Etat As Boolean)
Fonction dans laquelle tu écriras/liras à 0 ou 1 (Etat) le Bit n° 'NoBit' (de 0 à 7) dans l'octet 'monOctet'
Aide toi de la calculette Windows en mode Scientifique pour vérifier ton programme.
Quand tu auras créé ces fonctions, tu auras 25% de ton projet de fait !

PS : Projet intéressant mais prévois de l'aspirine !

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)


Cette discussion est classée dans : octet, état, compression, bits


Répondre à ce message

Sujets en rapport avec ce message

Lire un fichier Bits par Bits et Non octets Par octet [ par greg13 ] Je me demande comment je peux faire pour lire tout les bits d'un fichier(Ex : 01001011 ...)MerciGreg Aide pour la compression [ par MaxSoldier ] Bonjours ! Je vous explique mon problème. Je fais une logiciel de compression. POur compresser, j'utiliser un algo semblable à celui d'huffman. Par ex sql [ par Marie15 ] Bonjour,est ce que quelqu'un connaît comment récupérer le paramétre d'une requête paramétrée pour l'utiliser aprés dans le code VBA.par exemple l'affi Compression unicode. [ par JPMCDVI ] Bonjour, J’ai une base de donnée créée. Je rajoute en code une table avec des champs. Pour chaque champ, je modifie le nombre de caractères désirés ai Erreur 20532 au lancement d'un état crystal report 10 [ par Dghi ] Bonjour,Voila j'ai un problème avec les éditions d'états sous XP (SP3).Sur certain PC j'obtiens l'erreur 20532, qui correspond à priori à un problème extraire octets d'un fichier binaire de maniere optimisée [ par fatmaboule ] salut voici mon probleme: je souhaite extraire les octets d'un fichier binaire. Le volume de ces fichiers est acceptable (jusqu'a 10 Mo) le but e intégrer un état crystal reports ds vb6 [ par bidossessy ] koment associer segate crystal reports à vb6 sans problèmes. qd je fait ajouter un état crystal reports ds vb6 il m'affiche"la connexion n'est pa enco état et objet OLE [ par quinoa1 ] Bonjour, j'ai créé un état qui contient des objets OLE Word dans un champ nommé "description" et des images photoshop dans un champ "situation". Qu'il Compression ou sauvegarde d une image au format IPictureDisp [ par greedium ] Bonjour Dans mon application, je dessine une image (un plan en bitmap) qui est stockée au format IPictureDisp. Le problème quand je souhaite l'expor Aperçu et impression d'un état Crystal Reports 11 [ par badseyar ] Bonjour, j'ai créé un état sous Crystal Reports 11 Developer Edition. sous VB6, j'essaie d'en faire l'aperçu et l'impression, sans succès. j'ai t


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales