Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1184 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  conversion hexa ascii pour écrire dans un fichier [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

conversion hexa ascii pour écrire dans un fichier [RESOLU]

n°1368608
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 11:57:33  profilanswer
 

j'ai un bleme lors de l'utilisation de la méthode std::ofstream
 
voila, donc j'ai des valeurs de type hexa, ressemblant plus ou moins a ca :
 

Citation :

"0000800E080B36BAEA3F520..."

(std::string plus précisément)
 
je souhaite ajouter ces valeurs dans un fichier, mais de manière à obtenir ca :
 

Citation :

" € 6ºê?R u"

(soit leur conversion ASCII), ceci afin de pouvoir traiter le fichier avec un autre logiciel.
 
Quelqu'un aurait il une idée ?
 
jusqu'a présent j'en étais arrivé la :
 
 

Code :
  1. std::ofstream fichier_vid("test_vid.txt", std::ios_base::app | std::ios_base::binary);
  2.   fichier_vid << trame_video;
  3.   fichier_vid.close();


 
(trame_video, le contenu hexa de ma trame.)
 
Idée :
 
faut il passer par un istringstream et rentrer la trame video pour la convertir ? (avec un genre de std::ascii <= m'étonnerait que ca existe)
 
d'autres idées ?
 
 :bounce:


Message édité par Thordax le 17-05-2006 à 14:44:42

---------------
Atari 520 ST 256 Ko
mood
Publicité
Posté le 17-05-2006 à 11:57:33  profilanswer
 

n°1368626
skelter
Posté le 17-05-2006 à 12:10:31  profilanswer
 

Citation :

(avec un genre de std::ascii <= m'étonnerait que ca existe)


 
c'est surtout qu'on s'en fout, tu as justes à ecrires dans le fichier les nombres dont tu possedes la representation base 16 dans une chaine
apres le fait qu'il faille interpreter ces données comme une séquence de caracteres codés en ascii c'est du ressort de l'autre logiciel
 
le plus c'est de passer par istringstream pour convertir cette representation en entier (avec le manipulateur std::hex)

n°1368631
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 12:14:41  profilanswer
 

ben je peux pas demander a l'autre fichier d'interpreter les entrées différemment, c'est pas de mon ressort
 
c'est pas un fichier C++ qui est utilisé derriere etc


---------------
Atari 520 ST 256 Ko
n°1368633
skelter
Posté le 17-05-2006 à 12:17:49  profilanswer
 

quoi ?
 
je sais pas si t'a compris que pour ecrire dans un fichier un nombre dont la representation hexa est "0000800E080B36BAEA3F520..." on n'a pas besoin de savoir que c'est une sequence de caractere ascii ou autre

n°1368687
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 13:21:58  profilanswer
 

je reprends :
 
comment convertir "0000800E080B36BAEA3F520" en " € 6ºê?R u" ?


---------------
Atari 520 ST 256 Ko
n°1368713
skelter
Posté le 17-05-2006 à 13:53:37  profilanswer
 

skelter a écrit :


le plus c'est de passer par istringstream pour convertir cette representation en entier (avec le manipulateur std::hex)


n°1368727
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 14:01:00  profilanswer
 

ne change rien, je cherche à faire ca :
 
en fait pour reprendre plus clairement le fond du probleme, et en me servant de ultraedit et de la représentation hexa, je souhaiterais obtenir  
 
depuis la chaine :
 
 
 

Citation :

0000800E080B36BAEA3F520E20127587
995455770C43C603F20D0A15F3A2B90B
B1B72E8F2064DB150F69243C59D07E6C
7AE993EC944A0CA5CBD50F2F0D0A42C5
9F1966E766B00BBA732029E0CE120F52
F1AAEA49999A23963E7ECF0191941426
A98FD251E780C82A85742073047A0405
7FF0FE98FD31FA2051019A040574A070
0C82A856FF10394C7E94FD281C053839
405499E053963DFA27D21FA13F47


 
le résultat suivant (en gras):
 

Citation :


00015676h: 00 00 80 0E 08 0B 36 BA EA 3F 52 0E 20 12 75 87 ; ..€...6ºê?R. .u‡
00015686h: 99 54 55 77 0C 43 C6 03 F2 0D 0A 15 F3 A2 B9 0B ; ™TUw.CÆ.ò...ó¢¹.
00015696h: B1 B7 2E 8F 20 64 DB 15 0F 69 24 3C 59 D0 7E 6C ; ±·. dÛ..i$<YÐ~l
000156a6h: 7A E9 93 EC 94 4A 0C A5 CB D5 0F 2F 0D 0A 42 C5 ; zé“ì”J.¥ËÕ./..BÅ
000156b6h: 9F 19 66 E7 66 B0 0B BA 73 20 29 E0 CE 12 0F 52 ; Ÿ.fçf°.ºs )àÎ..R
000156c6h: F1 AA EA 49 99 9A 23 96 3E 7E CF 01 91 94 14 26 ; ñªêI™š#–>~Ï.‘”.&
000156d6h: A9 8F D2 51 E7 80 C8 2A 85 74 20 73 04 7A 04 05 ; ©ÒQç€È*…t s.z..
000156e6h: 7F F0 FE 98 FD 31 FA 20 51 01 9A 04 05 74 A0 70 ; ðþ˜ý1ú Q.š..t p
000156f6h: 0C 82 A8 56 FF 10 39 4C 7E 94 FD 28 1C 05 38 39 ; .‚¨Vÿ.9L~”ý(..89
00015706h: 40 54 99 E0 53 96 3D FA 27 D2 1F A1 3F 47          ; @T™àS–=ú'Ò.¡?G


Message édité par Thordax le 17-05-2006 à 14:04:48

---------------
Atari 520 ST 256 Ko
n°1368736
_darkalt3_
Proctopathe
Posté le 17-05-2006 à 14:06:15  profilanswer
 

donc tu représente un caractère par un entier exprimé en hexa ...

n°1368749
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 14:14:44  profilanswer
 

en gros je rentre ma chaine dans un iss par bouts de deux caracteres, exemple  

Code :
  1. std::istringstream iss( chaine.substr(0,2) );
  2. char valeur_sortie; iss >> std::hex >> valeur_sortie;


 
? apparemment ca maÿrde


---------------
Atari 520 ST 256 Ko
n°1368750
franceso
Posté le 17-05-2006 à 14:16:56  profilanswer
 

skelter t'a déjà donné la méthode :

skelter a écrit :

le plus simple c'est de passer par istringstream pour convertir cette representation en entier (avec le manipulateur std::hex)


 
tu prends chacun de tes nombres en hexa, et tu les écris dans ton flux. Ensuite, tu relis ce que tu viens d'écrire en précisant que c'est de la représentation hexa. Pour cela, tu utilises le manipulateur std::hex
 
Après, le programme qui lira ton fichier y trouvera ce qu'il veut. Si c'est un programme qui lit du ascii, il interpretera toutes tes valeurs comme des caractères codés en ascii et ça donnera le résultat que tu attends. Si c'est un programme qui lit de l'hexa, il lira la séquence hexa que tu as mise dans ton fichier.
 
Tu n'as pas à t'occuper de ça ; tout ce que tu fais, c'est prendre tes valeurs et les mettre dans un fichier.


Message édité par franceso le 17-05-2006 à 14:36:05

---------------
TriScale innov
mood
Publicité
Posté le 17-05-2006 à 14:16:56  profilanswer
 

n°1368753
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 14:20:37  profilanswer
 

ben donc je suis pas tres loin avec la méthode du dessus,  
 
j'ai pris un nombre hexa
 
que j'ai passé dans un flux iss et j'ai spécifié la représentation hexa par std::hex
 
mais la valeur de sortie reste "80" (au lieu de €)
 
?
 
EDIT : ca peut pas etre un ostringstream ? genre comme ca :
 

Code :
  1. std::ostringstream oss;
  2. oss << std::hex << "80";
  3. std::cout << oss.str();


Message édité par Thordax le 17-05-2006 à 14:27:09

---------------
Atari 520 ST 256 Ko
n°1368758
skelter
Posté le 17-05-2006 à 14:26:03  profilanswer
 

std::hex à un impacte uniquement si tu lit un entier
 

Code :
  1. std::istringstream iss("7a" );
  2. int n;
  3. if( iss >> std::hex >> n )
  4. {
  5.     std::cout << char(n) << '\n';
  6. }


Message édité par skelter le 17-05-2006 à 14:26:36
n°1368762
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 14:28:09  profilanswer
 

ok merci bien skelter, franceso, _darkalt3_ ;)
 


---------------
Atari 520 ST 256 Ko
n°1368772
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 14:42:33  profilanswer
 

ps : comment déclarer le topic "résolu" ?
 
EDIT : j'ai rien dit :o


Message édité par Thordax le 17-05-2006 à 14:44:18

---------------
Atari 520 ST 256 Ko

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  conversion hexa ascii pour écrire dans un fichier [RESOLU]

 

Sujets relatifs
probleme de lecture/ecriture dans un fichier excelecrire des caracteres speciaux
[Résolu]appel de Macro OpenOffice avec API UNO ????[pas résolu] sélection texte interfère avec déplacement calque
Récupérer une chaîne de caractère dans un fichierComment ajouter un élément à un fichier typé
[SQL] Requête pour récupérer le classement d'un championnat [Résolu]Copier les données d'un fichier vers un autre fichier
Comment imprimer un fichier Excel sous VB ?pb lecture fichier audio avec matlab
Plus de sujets relatifs à : conversion hexa ascii pour écrire dans un fichier [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR