Bonjour,
Connaissez-vous un moyen de retounez un type sachant que l'on ne connez pas en encore ???
Par exemeple
.MerciCode:
1
2
3
4
5
6
7
8
9 ??? type(int i) { int j=10; char c= 'c'; if(i==0) return c; else return j; }
Version imprimable
Bonjour,
Connaissez-vous un moyen de retounez un type sachant que l'on ne connez pas en encore ???
Par exemeple
.MerciCode:
1
2
3
4
5
6
7
8
9 ??? type(int i) { int j=10; char c= 'c'; if(i==0) return c; else return j; }
Peut être ça:
l'entier sous forme hexadecimale est précédé par un 0x, voir en hexa ce qui différentie tous les types.
Bon je n'ai pas très bien compris ta réponse!!!
Pour être plus clair, je vais avoir des images à traiter sous 4 formats différents (char, int, long int, flottant) donc je n'ai pas trop envie d'écrire toutes mes fonctions pour chaque format.
J'espère que quelqu'un sait!!!
Il n'y a rien de tres propre pour resoudre un probleme comme celui-la. Quatre fonctions differentes est certainement le meilleur choix.
Sinon, tu peux utiliser une union, avec un selecteur pour savoir quel membre utiliser, mais bonjour les switch case a gogo...
Voilà à quoi ta réponse me condamne, arggggggggggggggggggg
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 int lrezize(struct xvimage * image1,struct xvimage * image2, int xmin, int xmax, int ymin, int ymax) /* ajoute une constante a une image - seuil si depassement */ /* ==================================== */ #undef F_NAME #define F_NAME "laddconst" { int i,j,k; unsigned char *pt1, *pt2; unsigned long *lpt1,*lpt2; float *fpt1, *fpt2; int rs1, rs2, cs1, cs2, d, N; rs1 = rowsize(image1); rs2 = rowsize(image2); cs1 = colsize(image1); cs2 = colsize(image2); d = depth(image1); N = rs1 * cs1 * d; printf("dimension %d\n",d); /* ---------------------------------------------------------- */ /* calcul du resultat */ /* ---------------------------------------------------------- */ if (datatype(image1) == VFF_TYP_1_BYTE) { pt1 = UCHARDATA(image1); pt2 = UCHARDATA(image2); for(k= 0; k<d; k++) for (j = ymin; j <ymax; j++) for (i = xmin; i < xmax; i++) pt2[(j-ymin)*rs2 + i-xmin + k*rs2*cs2 ] = pt1[ j*rs1 + i + k*rs1*cs1]; } else if (datatype(image1) == VFF_TYP_4_BYTE) { lpt1 = ULONGDATA(image1); lpt2 = ULONGDATA(image2); for(k= 0; k<d; k++) for (j = ymin; j <ymax; j++) for (i = xmin; i < xmax; i++) lpt2[(j-ymin)*rs2+i-xmin+ k*rs2*cs2] = lpt1[ j*rs1 +i+k*rs1*cs1]; } else if (datatype(image1) == VFF_TYP_FLOAT) { fpt1 = FLOATDATA(image1); fpt2 = FLOATDATA(image2); for(k= 0; k<d; k++) for (j = ymin; j <ymax; j++) for (i = xmin; i < xmax; i++) { fpt2[(j-ymin)*rs2+i-xmin+k*rs2*cs2] = fpt1[ j*rs1 +i+k*rs1*cs1]; } } else { fprintf(stderr, "%s: bad image type(s)\n", F_NAME); return 0; } return 1; } /* laddconst() */
Je crois qu'en forme hexadécimale, c'est à dire à en langage machine si on peut dire, ces différents types sont codés différement, donc il faut voir ce qui carractérise en héxa chacun d'eux et se débrouiller pour voir à quel type correspond ton type entré. Je cite:
"La valeur d'un type de carractère est égale à la valeur du carractère d'après le jeu de carractères de la machine, par exemple, en ASCII, '0' sera 48"
A toi de voir entre quel code et quel code sont compris tes types et de les tester.
Il doit exister des fonction C qui le font.
(ya peut être plus simple)
Et pourquoi pas retourné un void* ???
Ben une macro suffit amplement
J'avais aussi pensé à une macro mais mes humbles compétences en la matière ne m'ont pas permis de l'écire...Citation:
Envoyé par PRomu@ld
Please help me!!!!!!!!!
retournez une structure
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #include <stdio.h> typedef union _U { int ent; char car; } U; typedef struct _RETOUR { int tp; U u; } RETOUR; RETOUR ftype(int i) { RETOUR ret; int j=10; char c= 'c'; if(i==0) { ret.tp = 1; ret.u.car= c; } else { ret.tp = 2; ret.u.ent= j; } return ret; } int main (void) { RETOUR resu; resu = ftype (7); if (resu.tp == 1) printf ("%c",resu.u.car); else printf ("%d",resu.u.ent); getchar(); return 0; }
Merci de ton aide.
Peux-tu me renseigner aussi sur le temps de calcul?
Ou de combien le temps de calcul est-l multiplié, "environ", en comparaison à écrire quatre fonctions???
Oui car mes images sont tridimensionnelles( 2 giga, l'image) ;)
Non. Que veux-tu faire exactement ? En plus, là le type est clair, c'est int.Citation:
Envoyé par vincho
Késkidi ?Citation:
Envoyé par petdelascar
C'est ça qu'il veut faire !!!Citation:
Envoyé par vincho
Moi non plus !Citation:
Envoyé par vincho
Structure avec sélecteur et union. C'est un peu usine à gaz...Citation:
Pour être plus clair, je vais avoir des images à traiter sous 4 formats différents (char, int, long int, flottant) donc je n'ai pas trop envie d'écrire toutes mes fonctions pour chaque format.
En fait on peut simplifier en long / double. Pas besoin des petits types. 2 familles de fonctions suffisent.
:?: :!: :?: Ca doit être de la bonne :!: :?: :!: :lefou: :marteau:Citation:
Envoyé par petdelascar