Вывод строковой переменной в текстовый файл в формате HEX - PullRequest
0 голосов
/ 28 января 2011

Я застрял с проблемой, которую не могу решить. Итак, мне нужно следующее: мне нужно создать программу, которая получает один строковый ввод и преобразует его в шестнадцатеричный формат, после чего сохраняет его в файл. Если файл не создан, он должен, но если он уже есть, он должен продолжать запись в тот же файл (я думаю, что параметр «+» - это то, что мне нужно здесь, верно?)

Итак, пример. Я выполняю программу. Просит меня ввести несколько слов. Я набираю «стек», и он возвращает мне это «73 74 61 63 6B», что является правильным. Я сделал это с помощью этого алгоритма

#include <cstdio>
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
int main(){
 string a;
 cin >> a;
 for( int i = 0; i < a.size(); i++ )
  printf( "%hX ", a[i] );
 cout << endl;
 system( "pause" );
 return 0;
}

Все хорошо, но мне нужно, чтобы это было отражено в текстовом файле. Я использовал это:

for( int i = 0; i < a.size(); i++ ) 
     {  
      fprintf(pFile, "%hX ", a[i]); 
     }

Но это не работает. Могу ли я получить помощь с этим, спасибо!

Полный код, извините, у меня проблемы с примерами кода. Надеюсь, вы не против вставить ссылку http://pastebin.com/3u1mfg8n

Ответы [ 4 ]

2 голосов
/ 28 января 2011

Вы изучаете C ++, так почему бы не использовать файловые потоки?

#include <fstream>
#include <iomanip>

using namespace std;

int main () {
  // Read your string as before
  fstream fs;
  fs.open ("hex.txt", fstream::out | fstream::app); // app = append to file
  for(int i=0; i<a.size(); ++i) 
  {  
    fs << hex << static_cast<int>(a[i]) << " ";
  }
  fs.close();
  return 0;
}
1 голос
/ 28 января 2011

Я проверил ваш код, и он работает правильно.Он создает файл с именем Personal Shop Codes.txt в каталоге, из которого он запускается.Я ожидаю, что проблема заключается в том, что ваша программа не запускается из каталога, из которого вы ожидаете, что ваш выходной файл просто неуместен.Это часто может иметь место при выполнении вашей программы в IDE.

0 голосов
/ 28 января 2011

Вам нужно использовать fopen () и назначить это первому указателю FILE:

FILE *pFile;
pFile = fopen("output.txt","w");

И затем закройте файл, когда ваша программа закончит запись в него:

fclose(pFile);
0 голосов
/ 28 января 2011

Это преобразует каждый байт в строке (каждый символ) в его шестнадцатеричную шестнадцатеричную кодировку:

for(int i = 0; i < a.size(); i++)
{
    printf("%2.2X ", a[i]);
}

Если вы хотите сохранить его:

std::string b = "";
for (int i = 0; i < a.size(); ++i)
{
    char tmp[3] = {0};
    sprintf(tmp, "%2.2X", a[i]);
    b += tmp;
}

Затем вы можете легко записать в файл всю строку b.

...