2011-01-28 15 views
0

解決できない問題が残っています。 私が必要とするのは次のとおりです。1つの文字列入力を受け取り、それを16進数に変換し、その後ファイルに保存するプログラムを作成する必要があります。 ファイルが作成されていない場合は、既に存在する場合は、同じファイルに書き込む必要があります(ここでは「a +」パラメータが必要です)文字列変数をHEX形式のテキストファイルに出力する

例です。私はプログラムを実行する。いくつかの言葉を入力するように求めます。 私は「スタック」とタイプして、これは正しい "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; 
} 

でそれをやったが、私は、テキストファイルにoutputedことが必要です。 私はこれを使用しました:

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

しかし、それは動作しません。これで助けを受けることができますか、ありがとうございます!

完全なコード、私はあなたがその2 - にこれは(各文字)文字列内の各バイトを変換します http://pastebin.com/3u1mfg8n

+0

"うまくいかない"という記述はあまりありません。詳細を追加できますか?それは何をするためのものか?何もない?クラッシュ? – Blorgbeard

+0

pFileの宣言と割り当てのコードを表示します。 –

+0

申し訳ありませんが、私は忘れてしまったと思います。はい、それは何もしません...上に問題のコードを追加します – Juraj

答えて

2

あなたは、次のとおりです。あなたのプログラムがそれに書き込みを終了したとき

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

をし、ファイルを閉じます。

+0

このような迅速な答えをありがとう。私は最初のいくつかの試行と同じ問題を抱えています。例えば ​​"stack"の出力は16進コードではありませんでしたが、 "s t a c k"でした。 – Juraj

+0

@Juraj:私は 'static_cast'を追加するために私の答えを編集しました(私はIDEにコードを書いていませんでした:)もう一度やり直してください。 – Tony

+0

確かに、私はあなたに数秒でお話します:)編集:すごい、これは仕事をした!助けようとした他の人にどうもありがとう! – Juraj

-1

ペーストビンリンクを気にしないことを望むコードサンプルで問題を抱えているごめん文字の16進エンコーディング:あなたはそれを保存したい場合は

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ファイルに簡単に出力できます。

fclose(pFile); 
+0

ありがとう、私はそれを実行しようとします!しかし、事は私がテキストファイルでそれらの出力が必要であることを除いて私のコードの作品です。 – Juraj

+0

@Flavioがファイル出力のために投稿したedit +の記事を参照してください。 –

0

あなたは、関数fopen()を使用しますと、まず、あなたのFILEポインタにそれを割り当てる必要があります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; 
} 
+0

私はこれをやったことがあります。少し誤解をおかけして申し訳ありません。数秒後に私の問題の質問を更新し、pastebinのリンクを追加しました:http://pastebin.com/3u1mfg8n – Juraj

+0

私が望むものだけを削除すると、http:// pastebinが完全に動作するように見えます。com/9rELapSr – Flavio

+0

それは奇妙な...それは私のために働いていなかった – Juraj

1

私はあなたのコードをテストしており、正しく動作しています。それは、それが実行されているディレクトリにPersonal Shop Codes.txtというファイルを作成します。問題は、あなたのプログラムが実行されることを期待するディレクトリから実行されていないことが予想されるため、出力ファイルが間違って配置されるだけです。これは、IDE内でプログラムを実行する場合によく起こります。

+0

デスクトップ上の実行可能ファイルを新しいフォルダにコピーし、実行後にテキストファイルを作成/更新しました。 – Juraj

関連する問題