Les Allergies
Alimentaires
Posez votre question Signaler

[C-ANSI] Type byte

Cemninho - Dernière réponse le 3 juil. 2008 à 10:09
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
Lire la suite 

[C-ANSI] Type byte »

4 réponses
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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;
Ajouter un commentaire
Réponse
+0
moins plus
Ok je te remercie Char Snipeur, je vais essayer d'utiliser ta méthode.

@++
Ajouter un commentaire
Ce document intitulé « [C-ANSI] Type byte » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?