1

Voilà j'aimerais lire ou modifier les octets dans une variable TiOS. J'ai donc 2 fonctions, mais qui ne marchent pas vraiment :

- Selon les listes retournées, certains octets sont négatifs !
- Quand on fixe certains octets ça modifie la taille de la variable
- Si on lit tous les octets, et qu'on les recopie dans une variable vide de même taille, on obtient pas une copie conforme de la variable d'origine.

Quelles sont les erreures de ces fonctions ? sad


Obtenir une liste d'octets :
- tbl_int[0] : 1er octet à obtenir
- tbl_int[1] : dernier octet à obtenir (donc on veut la liste comprise entre tbl_int[0] et tbl_int[1])
if(tbl_int[1]==0) tbl_int[1]=tbl_int[0]; // Si on a pas précisé le dernier octet, ça le met à la même valeur que le 1er (on obtiendra qu'un seul octet en tout)    sym_var=vat_open(tbl_chr[1]); // Obtenir un pointeur SYM_ENTRY vers la variable    if(sym_var)     {     if(tbl_int[1]==-1) tbl_int[1]=*(int*)HeapDeref(sym_var->handle)+1;     for(int_for=tbl_int[0];int_for<=tbl_int[1];int_for++)      {      tbl_rtt[int_rtr]=1; // Sans importance      if(int_for>=0 && *(int*)HeapDeref(sym_var->handle)+2>int_for) tbl_rti[int_rtr++]=((char*)HeapDeref(sym_var->handle))[int_for]; // if(on essaie bien de lire à l'interieur de la variable), tbl_rti[int_rtr++] stoque l'octet en question.      else tbl_rti[int_rtr++]=-1; // Sinon retient -1      }     }


Ecrire un octet :
- tbl_int[0] : octet à écrire
- tbl_int[1] : valeur à fixer
   sym_var=vat_open(tbl_chr[1]); // Ouvrir la variable    if(sym_var)     {      if(tbl_int[0]>=0 && *(int*)HeapDeref(sym_var->handle)+2>tbl_int[0]) ((char*)HeapDeref(sym_var->handle))[tbl_int[0]]=tbl_int[1]; // Fixer l'octet tbl_int[0] à tbl_int[1]     }
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

On ne peut pas mettre 2 sources dans un post, voilà la 2eme :
   sym_var=vat_open(tbl_chr[1]); // Ouvrir la variable    if(sym_var)     {      if(tbl_int[0]>=0 && *(int*)HeapDeref(sym_var->handle)+2>tbl_int[0]) ((char*)HeapDeref(sym_var->handle))[tbl_int[0]]=tbl_int[1]; // Fixer l'octet tbl_int[0] à tbl_int[1]     }
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Si tu veux récupérer des octets, le mieux est de faire : *(unsigned char *)HeapDeref(SymEntry->handle) (1ère source).
Ensuite, dans la deuxième source, essaie *(((char*)HeapDeref(sym_var->handle))+ tbl_int[0]) = tbl_int[1] confus.

4

-

5

Ah bon... Moi ça a pas marché...

zdrubal > Bah oui mais après je fais comment pour récupérer un seul octet ? Parceque du coup je ne pourrais pas faire (*(unsigned char *)HeapDeref(SymEntry->handle))[numero_de_l'octet] confus
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

J'ai rien dit... smile

Ça marche, merci top
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

7

*((unsigned char *)HeapDeref(SymEntry->handle)+numero_de_l_octet) ?
(je ne suis pas sûr que ça marche).

8

Post croisé smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

9

Pas de dommages colatéraux, ça va aller.

10

Bon bah merci en tt cas smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)