Bonjour tout le monde

djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005 - 15 févr. 2005 à 12:17
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005 - 16 févr. 2005 à 12:44
j'ai besoin d'un petit coup de main est ce que quelqu'un est en mesure de m'expliquer ca?
est ce normal
comment faire pour retrouver cette valeur ("00004348") en VB

25 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 févr. 2005 à 12:27
Excuse-moi mais si c'est un message codé, tu n'as pas fourni le décodeur



Pourrais-tu être plus clair stp et il y auras peut-etre quelqu'un pour t'aider




<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005
15 févr. 2005 à 12:44
quand tu converti 200 en hexadecimal on trouve C8 la je suis daccord
mais je comprend pas qd on passe a un type de donnees float 32 on obtient la valeur 4348

moi dans mon prog je veux convertir un decimal vers un caractere
exemple :

valeur decimal 200
valeur converti en hexa : C8
valeur que je veux recuperer : 4348 car cela correspond au caractere que je dois recuperer c'est a dire CHR(67) et CHR(72)

donc ma question comment passe t'on de C8 a 4348
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
15 févr. 2005 à 14:08
Pourraus-tu nous donner le morceau de code qui te pose problème (s'il existe) ?

Je ne comprends pas pourquoi 4348 correspondrait à chr(67) ou chr(72)
... ni ce que le passage par l'hexadécimal peut t'apporter.

Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005
15 févr. 2005 à 14:25
si on prend la valeur hexa de 48 correspond le caractere ascii H et code ascii 72 d'ou chr(72)
43 correspond le caractere ascii C et code ascii 67 d'ou chr(67)

voila le code :

Dim Chaine As String
Dim chaine1(7) As String
Dim ChaineRet As String
Dim i As Integer
Dim valchaine As Integer
Dim valtest As String


var = txt1.Text


ChaineRet = ""
'var = var / 100
Debug.Print Asc(128)


txt2.Text = ""
Chaine = String(8 - Len(Hex(var)), "0") & Hex(var)
For i = 0 To 7
chaine1(i) = Mid(Chaine, i + 1, 1)
Select Case chaine1(i)
Case "A"
chaine1(i) = 10
Case "B"
chaine1(i) = 11
Case "C"
chaine1(i) = 12
Case "D"
chaine1(i) = 13
Case "E"
chaine1(i) = 14
Case "F"
chaine1(i) = 15
End Select
Next


valchaine = CStr(CSng((16 ^ 1) * chaine1(0) + (16 ^ 0) * chaine1(1)))


ChaineRet = Chr(valchaine)
valchaine = CStr(CSng((16 ^ 1) * chaine1(2) + (16 ^ 0) * chaine1(3)))
ChaineRet = ChaineRet & Chr(valchaine)
valchaine = CStr(CSng((16 ^ 1) * chaine1(4) + (16 ^ 0) * chaine1(5)))
ChaineRet = ChaineRet & Chr(valchaine)
valchaine = CStr(CSng((16 ^ 1) * chaine1(6) + (16 ^ 0) * chaine1(7)))
ChaineRet = ChaineRet & Chr(valchaine)


For i = 0 To 7
txt2.Text = txt2.Text & chaine1(i)
Next
End Sub

suite d'explication :
d'apres le logiciel (hex worshop) dont g fait la copie d'ecran en haut
quand on passe de unsigned long a float(32) on passe de la valeur hex C8 a 4348
et moi c ce que je veux pouvoir recuperer comme valeur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005
15 févr. 2005 à 14:28
g extrait ce code d'un prog qui sert a la base a creer un fichier de caractere pour une machine a commande numerique et donc je veux pouvoir lui passer une dimension cette dimension je dois la passer en caractere et pour cette machine la valeur 200 correspond en code ascii a chr(0) chr(0) chr(72) chr(67)
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
15 févr. 2005 à 14:34
C'est déjà beaucoup plus clair pour le passage de 4348 à "CH".. Merci.

Mais pourquoi 200 (qui correspond à quoi ? ) devrait-il donner "CH" ?




Si la valeur décimale de départ vaut 201 (C9 en hexa), quelle valeur veux-tu récupérer en sortie ?


Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
15 févr. 2005 à 14:39
Oups .. pas vu ton dernier message. OK pour le 200.



Mais il y a au moins 1234567 algorithmes qui peuvent te donner 4348 quand tu leur entres 200.

Il faudrait savoir ce que cet algorithme doit donner quand on lui rentre 201,202,203, ...





Pour te donner un exemple :



Private Function transforme(i As Long) As String

transforme = "CH"

End Sub



Private Sub Command1_Click()

MsgBox transforme(200)

End Sub





Cette fonction répond à ton problème (tel qu'il est expliqué pour l'instant). Et je ne pense pas que ce soit ce que tu veuilles.






Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005
15 févr. 2005 à 14:44
le 200 c'est une dimensions au hasard pour expliquer
en effet 201 en hexa ca fait C9
mais si on met 201 on doit recuperer 4349
0
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005
15 févr. 2005 à 14:51
liste de valeur :
decimal valeur que je veux
100 42C8
200 4348
201 4349
202 434A.....
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
15 févr. 2005 à 15:29
Private Sub Command1_Click()

Dim valeur As Long

Dim indice As Long

Dim valeurHexa As String



valeur = Val(Text1.Text)



' 100 16968 + 1 * 128

' 200 16968 + 2 * 128

' 300 16968 + 3 * 128

' 400 16968 + 4 * 128

' xx00 16968 + xx * 128



indice = Int(valeur) / 100



valeurHexa = Hex(16968 + indice * 128 + Int(valeur) Mod 100)



MsgBox valeurHexa



nombre1 = ToDecimal(Mid$(valeurHexa, 1, 2))

nombre2 = ToDecimal(Mid$(valeurHexa, 3, 2))





MsgBox Chr(nombre1) & Chr(nombre2)







End Sub



Private Function ToDecimal(s As String) As Long

Dim first As String

Dim second As String

Dim i As Long

Dim j As Long



first = Left$(s, 1)

second = Right$(s, 1)



If first >= "0" And first = "0" And second
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
15 févr. 2005 à 15:31
Explications :



Je rentre le nombre de départ dans une TextBox nommée Text1.

J'appuie sur un bouton nommé Command1.

Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
durden8tyler Messages postés 2 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 16 février 2005
15 févr. 2005 à 15:46
Je bosse avec djefly sur le projet. Merci pour le code, mais il ne fonctionne pas pour toutes les valeurs.
Je te donne d'autres valeurs :

1 --> 3F80
2--> 4000
3--> 4040
4 --> 4080
7 --> 40E0
8 --> 4100
9--> 4110
10 --> 4120
30 --> 41F0
31 --> 41F8
32 --> 4200
127 --> 42FE
128 --> 4300
511 --> 43FF
512 --> 4400

En tout cas on va pouvoir travailler sur ton code, merci, mais si tu as la solution n'hésite pas.....
0
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005
15 févr. 2005 à 15:52
manu merci pour ce morceau de code comme ta di mon collegue ca marche pas pour tout pour te filer un coup de main voici ou tu peux telecharger un shareware ou tu pourra verifier toute les valeurs ce logiciel s'appel hex worshop
une fois installer dans le menu "Tools" il y a un outil qui s'appel base converter
byte order : motorola
data type : float 32
ensuite y a qu'a taper la valeur en decimal et ca te donne automatiquement ce que l'on veut
voila.
http://www.01net.com/telecharger/windows/Bureautique/editeur_de_texte/fiches/2152.html?fy

merci manu.
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
15 févr. 2005 à 15:56
> ca marche pas pour tout



Bah non, je l'ai rendu compatible avec les données que tu m'as données
(100,200,201,202, ...). Si tu veux rentrer le nombre décimal 135435434,
çà va planter, c'est sûr !



mais si tu pouvais m'aiguiller sur les nombres qui ne vont pas, çà
m'aiderait à améliorer le code. Je ne peux travailler que si j'ai des
infos complètes.






Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
15 févr. 2005 à 16:12
1 --> 3F80
2--> 4000
3--> 4040
4 --> 4080
7 --> 40E0
8 --> 4100
9--> 4110
10 --> 4120
30 --> 41F0
31 --> 41F8
32 --> 4200
127 --> 42FE
128 --> 4300


100 --> 42C8
200 --> 4348
201 --> 4349
202 --> 434A


511 --> 43FF
512 --> 4400






Cette suite n'est pas linéaire, et n'a même aucune forme qui me soit familière.

Par conséquent, je ne peux pas créer l'algo qui passe du nombre décimal au nombre hexadécimal. Impossible.



Il faut que vous trouviez l'algorithme de correspondance entre les deux
nombres. Personne ne peut le deviner en voyant le tracé de la courbe.

J'ai tracé point par point, une courbe représentant les nombres
décimaux en abscisses et les nombres hexadécimaux en ordonnées. Il n'y
a aucune relation évidente entre les deux.

Il y a sûrement un algo compliqué qui réalise çà, mais je ne peux pas le deviner.



=> Donc pas de programme générique. Il faut demander au concepteur de Hex Worshop comment il a fait.

Navré.


Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005
15 févr. 2005 à 16:15
g deja essayer mais g pas de reponse
merci quand meme manu
0
djefly Messages postés 16 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 18 février 2005
15 févr. 2005 à 16:21
je c'est pas si ca peut changer qqch mais avec hex workshop
quand on se sert de l'outil base converter
byte order : motorola
data type : float 32
tu met la valeur en decimale

en ensuite tu change float 32 en unsigned long et regarde 4348 devient C8
y a t'il un moyen de passer d'un float(32) vers un unsigned long en VB
faire un test du genre recuperer la valeur C8 dans un float par exemple pour la valeur decimale 200 puis convertir en unsigned long
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
15 févr. 2005 à 17:08
Salut,

Vous pourriez vous inspirer d'une source que j'ai déposé :

http://www.vbfrance.com/code.aspx?ID=23026

Notamment des fonctions Single_To_Binary et Binary_To_Hexa_32.
Il y a peut être plus simple mais j'ai testé vos valeurs avec mon code et ça marche.
L'idée est de transformer le nombre float 32 en binaire puis de le reconvertir en hexa le tout en tenant compte de la norme IEEE 754.

Bonne prog

Loup Gris
0
cbnet Messages postés 176 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 7 mars 2005
15 févr. 2005 à 17:45
VB ne me parait pas le langage le plus approprie pour ce genre de chose... et oui rien ne vaut un bon vieux C !
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
15 févr. 2005 à 19:12
Tout à fait ok avec toi cbnet. Quand j'ai fait ce code, c'était une sorte d'amusette pour voir si c'était possible en VB et pour quelques uns qui en avaient fait la demande.

Loup Gris
0
Rejoignez-nous