Saut de ligne dans un fichier binaire/texte

Signaler
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
-
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
-
Salut,

Quel est l'équivalent de "\n" et de "\t" en binaire. J'ai essayé 13 pour remplacer le "\n". Mais lorsque j'ouvre le fichier généré avec bloc-note, les retours à la ligne sont représentés par des carrés. Par contre quand j'ouvre le fichier avec Visual Studio, les saut de lignes sont correctement effectués et représentés.

Pendant que j'y suis, sous Windows XP, les noms des icones du bureau sont affichés avec de la transparence. Or apres une mauvaise manip', Windows n'affiche plus les ces noms avec de la transparence mais en utilisant come couleur de fond une couleur homogène (comme sous les vieilles versions de Windows).
Comment rétablir la transparence ?

Merci

12 réponses

Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006

Le '\n' c'est 13 suivi par 10, il faut mettre les deux à la suite 13 et 10.
Mais pour le '\t' je ne sais pas.
Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006

Pour le '\t', je viens de regarder et à priori ça m'a l'air d'être 9.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
La valeur de '\n' c'est '\n', 13 n'est pas la représentation binaire de
l'entier '\n' mais decimal, et cette valeur n'est pas portable.



mais pourquoi tu veux connaitre la valeur de '\n' et '\t' ?
Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006

Naturellement que 13 10 (pas 13 tout court) est la représentation décimale et pas binaire du retour à la ligne (mais c'est plus pratique de dire 13 10 que tout un tas de 0 et de 1).
Si on écrit dans un fichier en binaire et que l'on veut ensuite avoir un retourà la ligne en l'ouvrant avec un éditeur de texte, il faut écrire les deux entiers 13 et 10.
Et je viens de voir que c'est 9 pour la tabulation.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
et à quoi ca sert d'ecrire 13 si c'est égale à la constante '\n' ? pourquoi ne pas ecrire directement '\n' ?
Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006

Par exemple si on veut modifier des chaînes de caractères dans un fichier binaire, c'est utile puisque dans ce cas là on est obligé d'ouvrir le fichier en binaire pour le lire et le modifier.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
je ne comprends toujours pas à quoi ca sert de se servir de la valeur 13 au lieu de '\n'.



si '\n' == 13 alors

char i = 13;

fwrite( &i, 1, 1, file );

est équivalent à

char i = '\n';


fwrite( &i, 1, 1, file );
Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006

Déjà le retour à la ligne c'est 13 puis 10 (pas 13 tout seul) et il n'y a pas que le C, le \n ne marche pas toujours et dès fois ça peut-être pratique de savoir que c'est 13 puis 10 qu'il faut écrire pour mettre un retour à la ligne.
Et de toute manière je ne faisais que réponde à Galmiza qui posait la question car s'il obtient des carrées à la place du retour à la ligne, c'est justement parce qu'il écrivait seulement 13 à la place de 13 puis 10.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
mais ca sert rien de savoir que c'est 13 suivi de 10, c'est '\n' suivi de '\r' sous windows si tu veux, cad l'entier '\n\r'



tu crois pas que c'est plus simple d'ecrire ?

short i = '\n\r';

fwrite( &i, sizeof i, 1, file );
Messages postés
121
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
27 juillet 2006

Et si par exemple je veux mettre un retour à la ligne entre "truc" et "bidule" en Visual Basic, je fais "truc" & Chr(13) & Chr(10) & "bidule".
Voilà comme je l'ai dit, il n'y a pas que le langage C/C++ et au moins de savoir que c'est 13 suivi de 10, ça marche sur tous les langages sous Windows et même si on a un trou de mémoire pour le \n ou pour le je ne sais quoi pour un autre langage, on peut s'en tirer et mettre un retour à la ligne grâce à ça.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
oui, dans ce contexte la ca ce justifie
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Merci pour ces réponses.

En fait c'est pour éviter d'utiliser fopen & co car ça augmente énormement la taille de l'exe (6 ko).
Je préfère donc utiliser WriteFile(). Je ne génère le fichier qu'au dernier moment. Je sauve toutes les données dans un tableau de BYTE avant.

Et sinon vous savez comment resoudre le probleme avec la transparence des textes sous les icônes sur le bureau sous windows ?

Encore merci !