Bonjour a toutes et tous
J'ai un problème donc je viens solliciter votre aide. Je bosse actuellement sur un programme rédigé en c++ que je dois passer en c. Dans l'ensemble je n'ai pas trop de problème sauf sur un point: je ne trouve pas l'équivalence d'une classe c++ en c (si cela existe). Donc avez-vous des idées à me suggérer ???
La classe que je souhaite convertir en c est super simple, c'est pas une classe très étoffé (je vous mets le code en dessous). Tellement simple que beaucoup d'entre vous vont certainement me dire que j'en ai pas besoin, mais à priori cette classe est très importante dans le programme en c++ et j'aimerai garder la même "forme" entre mon programme c++ et sa conversion en c.
tableau.h
tableau.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Tableau { public: Tableau(int const& taille);//: longueur(taille), elements(new char [taille]){} int longueur; char *elements; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include "tableau.h" /*========================================= * Description : Création d'un tableau de char *=========================================*/ Tableau::Tableau(int const& taille): longueur(taille), elements(new char [taille]) { }
Je vous mets aussi un exemple de son utilisation dans une fonction pour comprendre en quoi la classe est importante pour le programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void sendTrameWriteModBus(char adrSlave, char CodeCommande, int adresseData, int nbrData, Tableau *tableau) { int variableLocale; qint64 nombreOctetsEcris; // variable de vérification pour l'écriture sur le port Tableau *bufferEmissionModBus = new Tableau((tableau->longueur * 2) + 9); // + 9 car : 7 octets d'entêtes MODBUS, 2 octets de CRC bufferEmissionModBus->elements[0] = adrSlave; bufferEmissionModBus->elements[1] = CodeCommande; bufferEmissionModBus->elements[2] = adresseData / 256; bufferEmissionModBus->elements[3] = adresseData & 255; bufferEmissionModBus->elements[4] = nbrData / 256; bufferEmissionModBus->elements[5] = nbrData & 255; bufferEmissionModBus->elements[6] = nbrData * 2; variableLocale = 7; for(int i = 0; i < tableau->longueur; i++) { bufferEmissionModBus->elements[variableLocale] = tableau->elements[i] / 256; variableLocale++; bufferEmissionModBus->elements[variableLocale] = tableau->elements[i] & 255; variableLocale++; } addCRC16(bufferEmissionModBus,bufferEmissionModBus->longueur - 2); // ajout du CRC sur les deux derniers octets du tableau 'bufferEmissionModBUS' nombreOctetsEcris = serialPort->write(bufferEmissionModBus->elements, bufferEmissionModBus->longueur); // écriture sur le port série }
Partager