2016-03-24 17 views
-1

サーバーから取得したファイルにイメージを置こうとしています。 fwrite機能を使用していますが、実際には機能しません。最大の問題は、\という文字を書くことができないということです。またはそうでないかもしれません。私はそれをどうするか分からない。誰かが私が間違っていることを知っていますか?前もって感謝します。イメージをファイルに書き込む - 間違った出力

は、ここに私のfwriteのコードです:

バッファは、サーバから取得したデータが含まれてい
FILE * pFile; 
if((pFile = fopen ("test", "wb")) == NULL) error(1); 
fwrite (buffer.c_str() , 1, buffer.size(), pFile); 

。それが純粋なhtmlを含んでいるとき、それはうまく働く。ここで

は私の出力である:ここでは

GIF89a¥ÈÔ 

は、それが書くことになっていたものです。

GIF89a\A5\C8\00 
+0

'buffer.size()' Cコードのように見えません。 C++を使用する場合は、C++コーディングスタイルを使用します。 – Olaf

+0

そうです。私は文字列関数のためにC++で書いています。 –

+0

なぜ 'buffer.c_str()'(テキスト)を使ってバイナリデータ(イメージファイルの内容)を書き込もうとしていますか?あなたが今得ている出力は、バイナリデータをテキストとして表示する場合、ファイルに含めるべきものに非常によく似ていますが、目的の出力は有効なイメージファイルの内容ではありません。 –

答えて

0

fwrite()は自動的にあなたがしたい変換を行うことはありません。 "\文字"に変換するコードを実装する必要があります。

例:

#include <cstdio> 
#include <string> 

void error(int no) { 
    printf("error: %d\n", no); 
    exit(1); 
} 

int main(void) { 
    char data[] = "GIF89a\xA5\xC8"; // '\0' is automatially added after string literal 
    std::string buffer(data, sizeof(data)/sizeof(*data)); 

    FILE * pFile; 
    // use text mode because it seems you want to print text 
    if((pFile = fopen ("test", "w")) == NULL) error(1); 

    for (size_t i = 0; i < buffer.size(); i++) { 
     if (0x20 <= buffer[i] && buffer[i] <= 0x7E && buffer[i] != '\\') { 
      // the data is printable ASCII character except for \ 
      putc(buffer[i], pFile); 
     } else { 
      // print "\ character" 
      fprintf(pFile, "\\%02X", (unsigned char)buffer[i]); 
     } 
    } 

    fclose(pFile); 
    return 0; 
} 
+0

私はそれを試しました。私の出力は次のようになります:GIF89a \ A5 \ 01 \ C8 \ 9A \ D4 \ので、フォーマットは正しいが、すべての値がそうではありません。 –

関連する問題