écrire en c# lire en c++

Résolu
cs_li Messages postés 54 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 6 juin 2011 - 6 juil. 2010 à 00:53
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 11 juil. 2010 à 13:03
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

cs_li Messages postés 54 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 6 juin 2011
7 juil. 2010 à 07:22
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);
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
6 juil. 2010 à 21:39
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
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
7 juil. 2010 à 08:54
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));
0
cs_li Messages postés 54 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 6 juin 2011
7 juil. 2010 à 14:04
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!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 juil. 2010 à 13:03
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
0
Rejoignez-nous