ビットマップ ファイルを C でブラウザーに書き込もうとしています。
write (socket, "BM", 2);
しかし、印刷できないものを10進値でどのように書くのですか? ファイルに書き込んでいた場合、次のようなものを使用できることを知っています。
fprintf(fp, "%c%c%c%c" , 40,0,0,0);
しかし、同じことを行う方法がわかりませんが、代わりにソケットに書き込むだけです...助けてください、ありがとう。
次を使用して、ファイル記述子をFILE
構造体でラップできます (したがって、すべてのprintf
ファミリを使用できます) fdopen()
。
int fd = socket(...);
FILE *fp = fdopen(fd, "w+");
これで、fp
他の FILE* と同じようになります。乾杯!
書き込みたいバイトが静的な場合は、単純にバッファを定義して使用できます...
char buffer[]={40,0,0,0};
write(socket, buffer, sizeof(buffer));
またはインライン...
write(socket, (char[]){40,0,0,0}, 4);
最良のアプローチは、文字がどこから来ているか (動的か、既にバッファに入っているか)、文字の数、エンコーディングを行うかどうか、サイズ要素がどこから来ているかなどによって異なります。
あなたはそのために使うことができます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);
snprintf
値を char バッファーに入れてから、バッファーから取り出すことができますwrite
。