CONVERTISSEUR D'UNE BASE VERS UNE AUTRE (BINAIRE, OCTAL, DÉCIMAL ET HEXADÉCIMAL)

Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016 - 15 nov. 2003 à 19:47
kurnz Messages postés 6 Date d'inscription dimanche 16 novembre 2003 Statut Membre Dernière intervention 4 octobre 2004 - 16 nov. 2003 à 22:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17956-convertisseur-d-une-base-vers-une-autre-binaire-octal-decimal-et-hexadecimal

kurnz Messages postés 6 Date d'inscription dimanche 16 novembre 2003 Statut Membre Dernière intervention 4 octobre 2004
16 nov. 2003 à 22:45
J'aimerais savoir si lorque tu écris octal tu veux dire base 8 ?? est-ce équivalent ??
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
16 nov. 2003 à 14:49
Le DeltaTime est l'indication de la durée qui sépare 2 informations de messages MIDI dans les MIDIFILES.

Les Delta Times sont comptés en nombre de Ticks.

Le Tick est fonction de la résolution (division d'une noire en petit bout)
Plus la résolution est grande, plus l'intervalle de temps entre deux Ticks est petit.

C'est organisé de la Façon suivante :
- Delta Time - MIDI Message1
- Delta Time - MIDI Message2
- Delta Time - MIDI Message3

etc..

On appele cette technique "time-stamped", ou données qui sont référencées temporellement.

La durée qui sépare 2 messages peut varier de
0 (zéro) à 268 435 455 ticks (28bits)

Pour deux octets la procedure pour compacter des Delta Times est la suivante :
Décaler les bits 8 à 14 d'une position vers la gauche
Positionner à 1 le bit 7 de l'octet de poid faible
positionner à 0 le bit 7 de l'autre octet

C'est nécessaire de connaitre ce genre de mécanisme si l'on veut lire des fichiers MIDIFILE ou en écrire

Ces infos sont tirées de la Norme MIDI Tome 1
(ISBN-2-7361-1400-0)

Bon Dimanche

A+

Afyn
Navedac
DocteurVB Messages postés 211 Date d'inscription lundi 19 août 2002 Statut Membre Dernière intervention 20 mai 2005
16 nov. 2003 à 12:17
à comprend toujours pas pourquoi tu te sert des décalages de bit, je me doute de toute façon que c'est le C ou le C++ qui est le plus adapté pour ce genre de chose mais c'est koi le "DeltaTimes"...?
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
15 nov. 2003 à 23:23
-> suite pour les noctambules
EBArt -> Merci, c'est sympa, j'vais bucher ça
Doc -> Je m'en sert pour le calcul des DeltaTimes du MIDI, c'est la méthode qui à été retenue (à l'époque le Basic ne savait pas faire tout ça, alors on programmait en C) pour avoir des données de longueurs variables. (ca sert à rien de Xmettre un mot de 32 bits si la valeur est 10 par exemple).
Merci pour vos lumières à tout les deux.
A+
Afyn
Navedac
DocteurVB Messages postés 211 Date d'inscription lundi 19 août 2002 Statut Membre Dernière intervention 20 mai 2005
15 nov. 2003 à 22:57
Cher EBArtSoft,

je ne savais pas qu'il existait une tel source sur ce site mais merci du renseignement.
ma source n'est pas très intéressante d'un point de vu mathématique. la conversion d'une base n vers une base m doit être un exercice autrement plus difficil que ce que j'ai pondu...
disons que mon code est plutot pratique pour étudier les fonctions d'extraction de chaine (ce sur quoi il sa base pour l'analyse des nombres).

d'autre part je me pose une question suite à votre reflexion sur le décalage de bit. quelle est le réel intéret du décalage de bit à part dans le calcule en base 2?

merci d'avance pour la réponse et bonne prog à tous...
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
15 nov. 2003 à 22:48
Afyn> et bien en basic sa donne qlq chose comme ça :

Pour tester :
Bit = iif((Valeur and (2^nBit)),1,0)

Pour allumer :
Valeur = (Valeur or (2^nBit))

Pour eteindre :
Valeur = (Valeur and not (2^nBit))

Mais quand on regarde le code compilé c'est pas
aussi propre que le c (compte tenu des fonctions employé)

@+
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
15 nov. 2003 à 22:33
J'ai jamais compris pourquoi VB ne possédait pas ce genre de fonction:
Pour forcer un Bit à 1 en C voila la fonction

Bit_1(val, n)
Long val, n;
{
return (val | (1L <<n));
}

Pour effectuer ce "Forcing", on décale le mot de valeur "1" ( il s'agit de Long, puisque il est suivit du caractère "L" ) de 'n' bits, et on effectue un "OU" BINAIRE (signe "|")

Pour Forcer un bit à Zéro (toujours en C)

bit_0(val, n)
long val, n;
{
return (val & ~(1L << n));
}


Remarquer la disposition du signe de complémentation.

On peut egalement avoir besoin d'une fonction qui renvoie la valeur d'un Bit (0 ou 1)

J'ai pas vraiment été capable de développer des fonctions similaires en VB, mais je suis preneur si qq sait faire. Ca permet de gagner pas mal de temps.

je sais que l'expression suivante

If Data <= &H7F

Permet de tester le bit de poid fort d'un Octet (8 bits) donc de savoir
s'il est à 0 ou à 1.

J'aimerai bien pouvoir tester n'importe quel bit d'un mot long (32 bits)

Si vous êtes callés sur cette question, merci d'avance.

Afyn
Navedac
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
15 nov. 2003 à 21:24
Afyn>DocteurVB>Tres cher ami en voyant ta question sur le decalage de bit je me suis dit au tres profond de moi meme "Tient mais n'est pas ce que que tu fait en ce moment ? une source pour ajouter a VB6 des fonctions qui nexiste pas et que serait tres pratique ?" ma reponse fut : "Mais SI"

lol

non ... en fait tout ça pour dire que je bosse en ce moment sur des fonctions avancé dans VB comme le decalage de bit, rotation etc...

Et pour dire au tres cher Dr qy'il existait sur ce meme site une source qui converti d'un nombre de base n en base n de (1 a ...) j'ai plus l'id de la source mais bon y'en a pas mal tu aurais pu t'en inspirer...

bref bonne pr@g a tous
DocteurVB Messages postés 211 Date d'inscription lundi 19 août 2002 Statut Membre Dernière intervention 20 mai 2005
15 nov. 2003 à 19:52
c'est possible je me suis pas trop pencher sur la question... si t'a regarder un peu le code qui n'est pas entièrement de moi (moi et un pote), on utilise pas trop des bits mais plutot des chaine de caractères.

pour répondre plus précisément à ta question, ces fonctions, si elles existe (ce qui m'étonnerais mais bon tout est possible), je ne les connais pas.
Afyn Messages postés 608 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 22 décembre 2016
15 nov. 2003 à 19:47
J'ai deux questions :
Y a t-il un truc simple pour faire un décallage de Bit vers la gauche ou vers la droite (comme en c : >>= n ou <<=n) ?
Y a t-il des fonctions en VB pour utiliser des Champs de Bits, c'est à dire je veux forcer le bit 4 d'un long (32 bits) à 0 ou à 1 ?

Merci d'avance

Afyn
Navedac
Rejoignez-nous