Page 1 sur 2
Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 9:57
par MysteryMann
Bonjour je suis débutant j'ai un petit problème que j'arrive pas à résoudre seul j'ai besoin de votre aide svp
j'aimerais récupérer la valeur de BIN mais que les 4 premiers bytes (12A2) et BIN2 les 4 derniers bytes merci de votre aide
Code : Tout sélectionner
Size = (?BIN)
DataSection
BIN:
Data.b $12,$a2,$b2,$ff
BINEnd:
BIN2:
Data.b $14,$ff,$15,$ff
BIN2End:
EndDataSection
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 10:32
par Zorro
Code : Tout sélectionner
Restore Bin:
for i=1 to 2
Read.c byte.c
debug Hex(byte.c)
Next i
debug "*******"
Restore bin2
For i=1 to 4
Read.c byte.c
debug Hex( byte.c)
Next i
DataSection
BIN:
Data.c $12,$a2,$b2,$ff
BINEnd:
BIN2:
Data.c $14,$ff,$15,$ff
BIN2End:
EndDataSection
autre methode :
Code : Tout sélectionner
debug hex(PeekC(?bin))
debug hex(PeekC(?bin+2))
debug "*************"
for i=0 to 6 step 2
debug hex(peekc(?bin2+i))
Next i
DataSection
BIN:
Data.c $12,$a2,$b2,$ff
BINEnd:
BIN2:
Data.c $14,$ff,$15,$ff
BIN2End:
EndDataSection
note que j'ai employé ".c" et pas "*.b" pour le type
car en Purebasic le *.b va de -128 a +127 donc ton $FF depasse !!
alors que le type "*.c" convient (bit signé ) on aurai pu aussi utiliser "*.a"
ps: j'ai vu que tu as lu ma reponse , un remerciement aurai été cool , mais bon
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 10:42
par MysteryMann
Merci beaucoup Zorro pour ton aide j'ai 2 autres questions possibles de récupérer les 4 bytes sans boucle d'un seul bloc ? c'est possible d'assembler 2 valeurs récupérées ? avec les 4 bytes récupérer de chaque partie exemple j'aimerais avoir en 1 seul bloc (12A215FF)
exactement j'ai eu le problème avec .b je te remercie pour la précision
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 10:49
par Zorro
MysteryMann a écrit :Merci beaucoup Zorro pour ton aide j'ai 2 autres questions possibles de récupérer les 4 bytes sans boucle d'un seul bloc ?
oui , il suffit de recuperer dans un *.Q
mais tu aura des "00" car en memoire c'est pas FF mais 00FF
et tu recevra ta sequence en partant de la fin (une histoire d'indiens je crois

)
mais tu peux tres bien faire supprimer un byte sur 2 avec les fonctions de String
note, qu'une boucle en Purebasic, c'est super super rapide quand meme

Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 11:06
par MysteryMann
Merci Zorro encore de ta réponse j'ai essayé ce que tu as dit cela ma rajouter des 0 entre les bytes en commençant par la fin comme tu me la dis ce n'est pas facile de manipuler ce genre de données dans ce langage je comprends mieux pourquoi la boucle car là ça me facilite pas la tâche avec les "00"
j'aurais bien aimé stocker l'hexadécimal récupérer l'hexadécimale intacte sans rajout
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 11:20
par Zorro
MysteryMann a écrit :j'aurais bien aimé stocker l'hexadécimal récupérer l'hexadécimale intacte
en fait il est intacte !!
mais avec la Fonction Peek on lit directement la Ram
voir ici :
https://fr.wikipedia.org/wiki/Endianness
apres la représentation d'une valeur en Ram varie en fonction de ce qu'on regarde
FF =$FF
00FF = $FF
000000FF=$FF
tout depend du segment qu'on veux bien voir le type determine la longueur
Code : Tout sélectionner
a.q=$FF12FF13 ;$FF
debug hex(peekQ(@a.q),#PB_Quad )
debug hex(peekL(@a.q),#PB_Long )
debug hex(peekW(@a.q),#PB_Word )
debug hex(peekC(@a.q),#PB_Ascii )
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 11:32
par MysteryMann
ok un grand merci a toi Zorro pour ton aide et ta patience grâce à toi je comprends mieux le fonctionnement de tout cela
une dernière question comment je peux faire pour réunir les 4 premiers bytes de bin et les 4 derniers bytes de bin2 en une seule variable
cela doit donner la valeur (var=12A215FF)
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 12:21
par Zorro
Code : Tout sélectionner
a.s=hex(PeekC(?bin))
a.s=a.s+hex(PeekC(?bin+2))
debug "*************"
for i=4 to 6 step 2
a.s=a.s+hex(peekc(?bin2+i))
Next i
debug a.s
debug "ce qui correspond à la valeur :" +str(val("$"+a.s))
debug "on peut aussi séparer comme ça"+left(a.s,4)+" "+right(a.s,4)
debug "ou comme ça :" +left(a.s,2)+" "+mid(a.s,3,2)+" "+mid(a.s,5,2)+" "+right(a.s,2)
DataSection
BIN:
Data.c $12,$a2,$b2,$ff
BINEnd:
BIN2:
Data.c $14,$ff,$15,$ff
BIN2End:
EndDataSection
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 12:31
par MysteryMann
Ah génial merci beaucoup Zorro tu m’enlèves une belle épine du pied ça fait 2 jours que je galère

Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 12:36
par Zorro
de rien , j'ai un peu modifié l'exemple
pour te montrer qu'en Purebasic, l'hexa c'est en fait du String (une représentation de la valeur decimal )
et que comme c'est du string, on peut découper comme on veux

Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 13:27
par MysteryMann
merci beaucoup ça m'arrange beaucoup en forme de string car j'ai pas encore l'habitude de purebasic
comment je fais pour mettre ensuite le string final sous-forme de byte ?
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 13:33
par Zorro
avec la fonction Val()
voir doc
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 13:37
par MysteryMann
merci je vais regarder ça ya trop de fonction dans ce langage

Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 13:42
par Zorro
Code : Tout sélectionner
a.c=255 ; soit FF en hexa qu'on ecrit "$FF"
valeur.s=hex(a.c)
debug "voici la représentation en hexa a l'aide de la fonction Hex()" + valeur.s
; on va maintenant le traduire en valeur decimal :
debug "voici le contenu de valeur.s sous forme numérique :"+val("$"+valeur.s)
debug "on peut donc recuperer la vraie valeur numerique"
resultat.c=val("$"+valeur.s) ; voila, on a convertie le String en valeur decimal
debug "ce qui donne :"+resultat.c
Re: Problème avec DataSection et bytes
Publié : mar. 04/oct./2016 14:17
par MysteryMann
Perfect merci
