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

Code : Tout sélectionner

debug hex(peekq(?bin2))
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 :lol: )
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 :D

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 :D

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 :D

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 :D