Problème avec DataSection et bytes

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Problème avec DataSection et bytes

Message 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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec DataSection et bytes

Message 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
Dernière modification par Zorro le mar. 04/oct./2016 12:30, modifié 1 fois.
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec DataSection et bytes

Message 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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec DataSection et bytes

Message 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 ;)
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec DataSection et bytes

Message 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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec DataSection et bytes

Message 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  )
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec DataSection et bytes

Message 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)
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec DataSection et bytes

Message 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
Dernière modification par Zorro le mar. 04/oct./2016 12:35, modifié 2 fois.
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec DataSection et bytes

Message 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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec DataSection et bytes

Message 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 :)
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec DataSection et bytes

Message 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 ?
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec DataSection et bytes

Message par Zorro »

avec la fonction Val()

voir doc
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec DataSection et bytes

Message par MysteryMann »

merci je vais regarder ça ya trop de fonction dans ce langage :D
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec DataSection et bytes

Message 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


Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec DataSection et bytes

Message par MysteryMann »

Perfect merci :D
Répondre