2017-10-14 16 views
0

Salut J'ai essayé d'obtenir mon code pour afficher les résultats dans un fichier texte sans aucun succès. J'apprécierai grandement que quelqu'un puisse y jeter un coup d'oeil. J'ai essayé fstream et cout sans aucune chance ... finalement j'ai juste utilisé le lot file.exe > Out.txt pour sortir le résultat. Y at-il de toute façon à faire cela dans le code cpp sans me tirer les cheveux?Hex Array cout à l'échec de fichier texte

Ceci est mon code actuel, il devrait sortir ... qu'est-ce que je fais mal?

#include <stdio.h> 
#include <string.h> 
#include <iostream> 
#include <fstream> 

int hex_to_int(char c) 
{ 
    if (c >= 97) 
     c = c - 32; 
    int first = c/16 - 3; 
    int second = c % 16; 
    int result = first * 10 + second; 
    if (result > 9) result--; 
    return result; 
} 

int hex_to_ascii(char c, char d){ 
     int high = hex_to_int(c) * 16; 
     int low = hex_to_int(d); 
     return high+low; 
} 

int main(){ 

    std::string line,text; 
    std::ifstream in("Input.txt"); 
    while(std::getline(in, line)) 
    { 
     text += line ; 
    } 
     const char* st = text.c_str(); 
     int length = strlen(st); 
     int i; 
     char buf = 0; 
     for(i = 0; i < length; i++){ 
       if(i % 2 != 0){ 


       std::ofstream out("Output.txt"); 
       std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf 
       std::cout.rdbuf(out.rdbuf()); //redirect std::cout to Output.txt CrickeyMoses! 
       printf("%c", hex_to_ascii(buf, st[i])); 
       std::cout << std::flush; 
       std::cout.rdbuf(coutbuf); 
       }else{ 
         buf = st[i];       
       } 
     } 
} 

Entree.txt:

2b524553503a4754494e462c3046303130362c3836323139333032303637373338312c2c34312c38393135343530303030303030343333353631322c33312c302c312c302c2c342e312c302c302c2c2c32303137313031323231353932332c2c2c2c30302c30302c2b303030302c302c32303137313031323232303032322c3534344324 
0A 
2b524553503a4754494e462c3046303130362c3836323139333032303637373338312c2c34312c38393135343530303030303030343333353631322c33312c302c312c302c2c342e312c302c302c2c2c32303137313031323231353932332c2c2c2c30302c30302c2b303030302c302c32303137313031323232303032322c3534344324 

Output.txt:

+RESP:GTINF,0F0106,862193020677381,,41,89154500000004335612,31,0,1,0,,4.1,0,0,,,20171012215923,,,,00,00,+0000,0,20171012220022,544C$ 
+RESP:GTINF,0F0106,862193020677381,,41,89154500000004335612,31,0,1,0,,4.1,0,0,,,20171012215923,,,,00,00,+0000,0,20171012220022,544C$ 

Hex ASCII C++ décodeur

+1

Quel est le problème avec l'aide de la [ 'std :: hex'] (http://en.cppreference.com/w/cpp/io/manip/hex) manipulateur d'E/S pour l'écriture de balayage? – user0042

Répondre

3

Ne vous embêtez pas rediriger std::cout. Il semble que vous vouliez le faire afin de formater la valeur de retour en tant que caractères avec printf. Cela peut être fait en le transposant à char et en le publiant directement sur le std::ofstream.

std::ofstream out("Output.txt", std::ios::out); 

for (i = 0; i < length; i++){ 
    if (i % 2 != 0){ 
     out << static_cast<char>(hex_to_ascii(buf, st[i])); 
    } else { 
     buf = st[i]; 
    } 
} 

out.close();