écrire en c# lire en c++ [Résolu]

Signaler
Messages postés
54
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
6 juin 2011
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Voila j'ai fais une application c# qui écrit dans un fichier texts de la façon suivante :

BinaryWriter br = new BinaryWriter(new StreamWriter("ol.txt").BaseStream);

et J'écris par exemple

br.write(19);
br.write(Salut);

j'aimerais faire l'opération inverse (lecture) mais en c++
pour lire le integer c'est simple :

std::ifstream l("ol.txt",std::ios::in);
int i =0;

l.read((char*)&i,sizeof(int));

Mais pour lire la chaine de caractere (qui peut avoir n'importe quel taille) je ne sais pas trop comment mit prendre

c# j'utiliserais

br.readString

mais en c++ ?????

5 réponses

Messages postés
54
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
6 juin 2011

En fait j'ai dejas trouver la solution en c# quand on utilise un binaryWriter pour écrite un string avec la methode writeString


le binaryWriter ecrit la taille du string sur 2 bytes et ensuite le string...

donc en c++ pour le lire il sufit de lire l'entier puis de sen servire pour savoir combien de caractere lire

exemple :

int stringL=0;
char * texte;
//on li l'entier qui reprensente la taille de la chaine de caratere
file.read((char*)&stringL,sizeof(char));

//on li la chaine
texte= new char[stringL];
file.read(texte,stringL);
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Regarde du côté de std::getline.

________________________________________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
le binaryWriter ecrit la taille du string sur 2 bytes et ensuite le string...

//on li l'entier qui reprensente la taille de la chaine de caratere
file.read((char*)&stringL,sizeof(char));

Là y'a un souci, 2 bytes pour moi c'est pas un char mais un short :
file.read((char*)&stringL,sizeof(short));
Messages postés
54
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
6 juin 2011

En effet cependant quand j'utilise le short il en li trop!! apres quelque teste je me suis rendu compte qu'avec char ca fonctionnait très bien!
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
En fait c'est pas tout a fait ca. La taille de la chaine est codée en "32-bit integer compressed format".
La taille de la chaine est codée sur un nombre variable d'octets.

Donc, dans ton cas ca marche car ta chaine fait moins de 128 caractères.
Mais pour une chaine de 200 caractères par exemple, la taille est codée sur 2 octets.

En gros, il te faut réécrire la méthode BinaryReader.Read7BitEncodedInt en C++

_____________________________________
Un éditeur de ressources gratuit pour Windows