3

ビットマップ ファイルを C でブラウザーに書き込もうとしています。

write (socket, "BM", 2);

しかし、印刷できないものを10進値でどのように書くのですか? ファイルに書き込んでいた場合、次のようなものを使用できることを知っています。

fprintf(fp, "%c%c%c%c" , 40,0,0,0);

しかし、同じことを行う方法がわかりませんが、代わりにソケットに書き込むだけです...助けてください、ありがとう。

4

4 に答える 4

4

次を使用して、ファイル記述子をFILE構造体でラップできます (したがって、すべてのprintfファミリを使用できます) fdopen()

int fd = socket(...);
FILE *fp = fdopen(fd, "w+");

これで、fp他の FILE* と同じようになります。乾杯!

于 2011-04-11T10:11:31.337 に答える
4

書き込みたいバイトが静的な場合は、単純にバッファを定義して使用できます...

char buffer[]={40,0,0,0};
write(socket, buffer, sizeof(buffer));

またはインライン...

write(socket, (char[]){40,0,0,0}, 4);

最良のアプローチは、文字がどこから来ているか (動的か、既にバッファに入っているか)、文字の数、エンコーディングを行うかどうか、サイズ要素がどこから来ているかなどによって異なります。

于 2011-04-11T13:29:28.303 に答える
2

あなたはそのために使うことができますsprintf

char data[4];
sprintf(data, "%c%c%c%c", 40, 0, 0, 0);
write(socket, data, 4);

編集:

これを頻繁に使用している場合は、次のようにソケットへのフォーマットされた書き込み用の独自の関数を作成できます。

void writef(int socket, const char * format, ...) {
    char buffer[1024];
    va_list args;
    va_start(args, format);
    int length = vsprintf(buffer, format, args);
    va_end(args);
    write(socket, buffer, length);
}

その後、あなたは単に呼び出すことができますwritef(socket, "%c%c%c%c", 40, 0, 0, 0);

于 2011-04-11T10:14:39.137 に答える
1

snprintf値を char バッファーに入れてから、バッファーから取り出すことができますwrite

于 2011-04-11T10:11:45.097 に答える