Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Conversion binaire - Nombre d'octets [ Algorithme / Maths ] (mJuJu)

jeudi 15 mai 2008 à 18:06:01 | Conversion binaire - Nombre d'octets

mJuJu

Bonjour

J'écris en ce moment un programme capable de convertir de grands nombres décimaux en binaire. Connaissant le nombre de chiffres composant le décimal, existe-t-il un moyen de calculer approximativement le nombre d'octets nécessaires à la conversion?

D'avance merci pour vos réponses

 


jeudi 15 mai 2008 à 19:24:44 | Re : Conversion binaire - Nombre d'octets

jack

Administrateur CodeS-SourceS
Salut
Suffit de trouver la puissance de 2 juste supérieure à la valeur de ton nombre.
Exemple : 58 se codera avec 6 bits puisque 2^6 = 64, donc sur 1 octet (puisque 1 octet = 8 bits)

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

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

jeudi 15 mai 2008 à 20:16:23 | Re : Conversion binaire - Nombre d'octets

Kevin.Ory

Salut,

Private Function GetNbrOfBits(Value as Integer) as Integer
    For i as Integer = 1 to 32
        If 2^i > Value Then Return i
    Next i
End Function


Avec la veur 32 tu peux donc tester que des integer (nombres allant jusqu'à un peu plus de 2.1 milliards)
Value est en integer, donc si tu veux tester des plus gros nombre, faut changer son type.
Ca ne fonctionne qu'avec des nombre positifs. Il y a des changements à faire si tu veux tester des nombres négatifs (Math.Abs() par ex).
Si tu veux pas le nombre de bit mais d'octets, tu peux faire For i as Integer = 8 to 32 Step 8 pour ne tester les valeurs que tous les 8 bits et ainsi gagner du temps.

Voilà :)
Une formule en une ligne n'est pas possible que je sache.
   

jeudi 15 mai 2008 à 20:49:53 | Re : Conversion binaire - Nombre d'octets

casy

Membre Club

Quelques remarques sur ton code Kevin :

Un Integer (ça dépend du langage) va jusqu'à 2,...millard soit de 0 à (2^31)-1 et non pas 2^32. Un Integer est signé, donc le dernier bit sert de bit de signe.
Mais cela n'est valable qu'en VB2005, ce que laisse suggerer ton code d'ailleurs.

En VB6 (rubrique du sujet) par contre un integer va jusqu'à (2^15)-1, soit 32767

Un Integer en .Net corespond à un Long en VB6.

En .net tu peux aller plus loin avec le long qui va jusqu'à (2^63)-1. Il n'y a pas d'équivalent en VB6
En .Net tu eux aussi aller plus loin pour chaque type en utilisant sa version non-signé. Ex un UInt va jusqu'à (2^32)-1 au lieu du (2^31)-1 de l'integer. Là non plus il n'y a pas d'équivalent en VB6


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]

jeudi 15 mai 2008 à 20:59:39 | Re : Conversion binaire - Nombre d'octets

casy

Membre Club
Pour connaitre le nombre de bits necessaires pour coder un nombre, il faut comme le dit Jack, trouver la puissance de 2 immédiatement suppérieure

En partant de la valeur à analiser, soit une boucle ou à chaque cycle on affecte à une variable le résultat de la division de cette variable par 2. Le nombre de bit sera donné ar le nombre d'itération de la boucle tant que la partie entière du résultat n''est pas égale à 0

Public Function nbBits(valeur As Long) As Integer
Dim valtemp As Double

   nbBits = 0
   valtemp = valeur
   While Int(valtemp) > 0
       valtemp = valtemp / 2
       nbBits = nbBits + 1
   Wend

End Function
Coloration Syntaxique pour VB6 By

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]

jeudi 15 mai 2008 à 21:03:53 | Re : Conversion binaire - Nombre d'octets

mJuJu

J'ai bien compris l'algorithme que vous proposez.

Mais supposez un nombre de 200 000 chiffres ou plus, le calcul du nombre de bits (ou d'octets, peu importe) nécessaires à la conversion, va demander presque autant de temps que la conversion elle-même. Je cherche donc un calcul beaucoup plus rapide, s'il existe. De mon côté je cherche sur internet une solution à ce problème, mais je n'ai encore rien trouvé

jeudi 15 mai 2008 à 21:16:16 | Re : Conversion binaire - Nombre d'octets

Charles Racaud

Membre Club
Réponse acceptée !
Salut,

Avec des logarithmes :
NbBit = Fix(Log(i) / Log(2) + 1)

__________
  Kenji


jeudi 15 mai 2008 à 21:16:34 | Re : Conversion binaire - Nombre d'octets

Kevin.Ory

Re,

En fait si, j'ai eu bcp de peine à m'en souvenir (on m'a aidé):

        Dim Valeur As Integer = 165493
        Dim NbrOfBits As Integer = Math.Ceiling(Math.Log(Valeur, 2))
        Dim NbrOfBytes As Integer = Math.Ceiling(Math.Log(Valeur, 2) / 8)




jeudi 15 mai 2008 à 21:16:49 | Re : Conversion binaire - Nombre d'octets

casy

Membre Club
Sachant qu'en VB6, le plus grand nombre que tu peut convertir est un Double soit au maxi 1,79769313486232E308

Mon code s'execute sur mon PC (un P4 d'il y a 5 ans) en une moyenne de 0,24ms avec un delta de +/-0.02ms

Au passage, le résultat c'est 1024

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]

jeudi 15 mai 2008 à 21:59:08 | Re : Conversion binaire - Nombre d'octets

Kevin.Ory

Oups, je suis confus. J'avais effectivement cru que l'on parlais de .NET

casy> Oui je sais qu'un Integer en .NET est du 32 bits signé, d'où mon "(nombres allant jusqu'à un peu plus de 2.1 milliards)". Mais effectivement ça ne sert à rien d'aller jusqu'à 32, 31 suffit.

mJuJu> "Mais supposez un nombre de 200 000 chiffres ou plus

Ok, dans ce cas tu peux effectivement pas calculer le nombre de bits en fonction de ton nombre. J'imagine mal un processeur de PC faire un calcul sur un tel nombre d'ailleur, même une addition

Même avec une table précalculé c'est impossible, puisque il est impossible de représenter de tel nombre dans un PC







1 2

Cette discussion est classé dans : nombre, binaire, conversion, octets


Répondre à ce message

Sujets en rapport avec ce message

Conversion Ascii ou Hex en Binaire [ par FOX ] Bonjour,existe t-il une fonction pour convertir des données Ascii ou Héxadecimal en Binaire. Ou quelqu'un à t-il déja un dico de conversion.Mercisebas Conversion d'un nombre entier en une chaine de caractère [ par Janot ] Ben, je n'arrive pas à trouver la fonction qui convertit un nombre entier en une chaine de caractères (je connaîs seulement Val qui fait l'inverse).Me Conversion chaine de caracteres en un nombre entier [ par tntdavid ] Je voudrais connaitre le code VB d'une fonction qui me permettrait de convertir une chaine de 6 caractères en un nombre entier.Merci d'avance de l'att Ajout d'une valeur décimal à un nombre héxadécimal sur 8 octets [ par sebastien fouilloux ] Bonjour,comment ajouter un nombre décimal, à une chaine de caractère string ou autre qui comporte un nombre héxadécimal sur 8 octets.Mercic très urgen Aide SVP... conversion de decimal à binaire [ par jjs ] J'arrive pas à trouver la fonction qui me transforme des décimaux en binaires, en excel elle existe sous le nom decbin, est ce qu'il existe une foncti Conversion BigEndian en LitleEndian [ par YahnIck ] Bonjour a tousj'aimerais savoir comment procéder pour convertir du Bigendian en litleEndian avec VB6. Je n'arrive pas à lire correctement les fichiers CONVERSION Binaire => décimale [ par gounit ] Bonjour,Je cherche un moyen de convertir en décimale une variable contenant à chaque coup d'horloge une chaine de caractère contenant 2 caractères. Pl conversion décimal binaire [ par Maryse ] je cherche à convertir un nombre décimal en binaire. - Y-a-t il une syntaxe particulière pour les nbes binaires ?(pour l'hexa c'est &HHHH&)- Y Relire en Vb un nombre float dans un fichier binaire [ par cuq ] Bonjour J'ai un fichier binaire qui contient des nombre de type "float" donc codé sur 32 byte .Comment relire ce nombre en VB .J'ai une solution qui r Binaire Currency [ par pascalparis ] quelle est la norme qui définie la traduction en binaire d'un nombrede type Currencyou comment peut-on traduire en binaire un nombre Currency"j'ai cel


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,140 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.