[C-ANSI] Type byte

Cemninho -  
 Cemninho -
Bonjour,

Je travaille en C-ansi (programmation de pic). J'ai une donnée de type 'int' que je désire transmettre dans un tableau de 'byte'. Or un byte ne peut contenir que des entiers de 0 à 255 alors que mon entier est bien au delà de ça.

Quelqu'un a une solution svp ?

Merci
A voir également:

4 réponses

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
oui, tu met ton int dans plusieurs cases.
2 ou trois selon la taille de ton int. En général, un int est codé sur un nombre entier d'octet.
Si tu as
byte *tabtrans=(byte*)malloc(sizeof(int)*nb_int_a_transfere);
int S=64213;
alors, tu peux mettre ainsi ton N ième entier dans le tableau :
*((int*)tabtrans+N)=S;

Il faut bien voir qu'un pointeur ce n'est qu'un certain espace mémoire alloué dans lequel tu peux mettre les bits comme tu veux. C'est le typage de la variable qui pointe sur cet espace qui compte ensuite.

Pour récupérer tes données, le plus simple est de faire :
int* tab_int=tabtrans;
Et alors tab_int[0] donnera ton premier entier.
0
Cemninho
 
Merci char Snipeur,

J'ai également pensé à cette solution en creusant un peu :

byte temp = 0;
int entier = 23087; //entier à passer en bytes

temp = (byte) entier%1000;
(j'entre ensuite la valeur de temp dans un tableau de byte)
puis

temp = (byte) ((entier - temp*1000)%100);
et ainsi de suite.

Est-ce que c'est valable ?

Cem
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
oui et non.
entier%1000 te donne un nombre compris entre 0 et 999, qui tronque en fait la parti "haute" du nombre. Pour la deuxième opération, il vaut mieux faire :
temp=entier/1000; où tu utilises les propriétés de la division entière.
Mais après tout dépend de l'utilisation exacte que tu veux faire de ça. Ta méthode prends soit plus de place, soit limite la gamme d'utilisation. Si byte=octet comme couramment utilisé, alors chaque variable byte vaut au maximum 255, il faut donc adapter ta méthode et passer de 1000 à 100. ainsi tu ne peux codé que des nombre inférieur à 10000.
Tu peux optimiser en remplaçant les 1000 par 256(temp=entier%256;temp=entier/256;), mais ta méthode reste dépendante de la base choisie. Ce que je t'ai donné reste valide quelque soit l'implémentation du compilateur.
De plus, ma technique ne demande pas de temps cpu (ou très peu)
Tu peux même encore simplifié en disant :
byte* tab_trans=&entier;
0
Cemninho
 
Ok je te remercie Char Snipeur, je vais essayer d'utiliser ta méthode.

@++
0