[C-ANSI] Type byte
Cemninho
-
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
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:
- [C-ANSI] Type byte
- Malware byte - Télécharger - Antivirus & Antimalwares
- Clear type - Guide
- Type de ram - Guide
- Byte en mo - Forum logiciel systeme
- Comment changer le type de fichier - Guide
4 réponses
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.
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.
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
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
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;
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;