totorcalais a écrit :
A moins de décomposer une chaine ascII en 1 caractère que je pokeB l'un après l'autre (et là, j'ai beau chercher, je ne trouve pas de commandes aisées pour ce faire (j'ai bien une idée mais elle me semble fastidieuse à coup de lset)).
Qu'en pensez vous?
pfffff. je dois reconnaitre, que je ne saisi pas vraiment ce que tu veux .....
mais je réagit a ta reflexion citée ci dessus !
en Pure basic, travailler avec des chaines, c'est super simple !
deja , il serai peut etre bien, que tu lise la Doc de Purebasic !! (Touche F1 lorsque tu est dans l'editeur )
je te precise ça , car dans la Doc , tu as une partie consacré a la librairie "String"
et dedans , tu aurai trouvé la fonction "StringField() "
cette fonction permet d'extraire ce que tu veux d'une chaine séparé par un caractere
tu aurai trouvé la fonction Mid() , un standard du Basic , qui permet d'extraire une chaine dans une chaine
a n'importe quelle position , et de n'importe qu'elle taille
autre chose, pour finir, l'hexadecimal en Purebasic c'est une Chaine de caractere !!!
donc puisque tu tiens a travailler en Hexa, alors, reste en mode String() , utilise PokeS() et PeekS()
comme ça tu restes dans la meme reference (le String)
si tu commences a melanger les valeurs de l'hexa (avec PokeB() ou PeekB() , et le mode String (PeekS) , tu risques de galerer
soit tu passes tout en numérique (donc avec les PokeB() PeekB() etc .. et la conversion de Hexa$ en numerique (decimal par ex)
soit tu restes en mode String, et tu prepares ta chaine a envoyer (tout en String) avec les fonctions qi vont bien (mid() ,Left(),Right() , ReverseString() StringField() etc ... , avant de l'envoyer
perso je prendrai la deuxieme solution , car meme si le mode String est réputé plus lent
c'est quand meme vachement plus "humain"
Code : Tout sélectionner
chaine$="Zorro est arrivé" ; notre chaine
For i=1 to len(chaine$)
car$=mid(chaine$,i,1) ; on isole chaque caractere de la chaine
ascii=asc(car$) ; on recup le code ascii de chaque caractere
Debug "le code ascii de :"+car$+" c'est :"+str(ascii) +" soit en hexa: "+hex(ascii) ; on affiche la ligne qui donne le caractere + son code ascii
hexa_cumule$=hexa_cumule$+" "+hex(ascii) ; ici on cumule dans une chaine les codes ascii trouvé séparé par un espace
Next i
debug "voici ta chaine en hexa cumulé" +hexa_cumule$ ; <<<--- ceci prouve que l'hexa c'est en fait un string
debug "voici le 5em em code hexa de la chaine cumulé :" +StringField(trim(hexa_cumule$),5," ")
debug ""
debug ""
; et si toutefois, tu veux utiliser les valeur de ces codes ascii
For i=1 to countstring(Trim(hexa_cumule$)," ")+1 ; je compte le nombre d'espace dans la chaine cumulé
car$ =StringField(trim(hexa_cumule$),i," ") ; je recup chaque sous-chaine se trouvant entre les espaces
code=val("$"+car$) ; je transforme la sous chaine recupéré en valeur Decimale , et je colle ça dans la vairable "Code"
debug "le caractere :"+chr(code)+" en decimal :"+str(code)+" en binaire :"+bin(code) +" et encore en hexa string : "+hex(code) ; plus qu'a afficher (ou envoyer ) comme on veux !
Next i
comme tu peux voir, passer d'une string a sa correspondance numérique, n'est vraiment pas compliqué
perso ,j'aime bien manipuler les chaines, parcequ'en Purebasic, c'est quand meme vachement simple !
apres, tu peux extraire ce que tu veux, et en faire une valeur numérique
le truc a savoir c'est que pour convertire de l'hexa en sa valeur numérique, il faut ajouter le caractere
"$"
exemple :
Code : Tout sélectionner
car_hexa$="FF"
en_decimal=Val("$"+car_hexa$); <<<<< le caractere "$" a pour effet que Purebasic considere la variable car_hexa$ comme etant de l'hexa !
debug en_decimal ; 255 en principe
pareil pour le binaire , le transformer en decimal , il faut ajouter le caractere
"%"
Code : Tout sélectionner
car_binaire$="11111111"
en_decimal=Val("%"+car_binaire$) ; <<<<< le caractere "%" a pour effet que Purebasic considere la variable car_binaire$ comme etant du binaire !
debug en_decimal ; 255 en principe