1

以下の関数は、呼び出されたときに単に html を提供しますが、

void generateHTML (int socket) {
   char* message;

   // Sends HTTP response header

   message = "HTTP/1.0 200 OK\r\n"
                "Content-Type: text/html\r\n"
                "\r\n";
   printf ("about to send=> %s\n", message);
   write (socket, message, strlen (message));

   message = "<HTML><BODY><P>Hello World.</P></BODY></HTML>\n";
   printf ("about to send=> %s\n", message);
   write (socket, message, strlen (message));   
}

私の Web ブラウザへの出力は、単純な Hello World メッセージです。ただし、代わりにビットマップ画像を表示するように変更したいと思います。1x1 の赤いピクセルを bmp として使用しましょう。

これまでのところ、この関数を次のように変更しました。

void generateHTML (int socket) {
   char* message;

   // Sends HTTP response header

   message = "HTTP/1.0 200 OK\r\n"
                "Content-Type: image/bmp\r\n"
                "Content-Length: ???WTF???\r\n";
   printf ("about to send=> %s\n", message);
   write (socket, message, strlen (message));

   message = "BMF8\n";
   printf ("about to send=> %s\n", message);
   write (socket, message, strlen (message));   

   message = " "; //bmp file data goes here.
   printf ("about to send=> %s\n", message);
   write (socket, message, strlen (message));   
}

Dan の回答から引用すると、16 進数のデータは次のようになります。

0000000: 424d 3a00 0000 0000 0000 3600 0000 2800  BM:.......6...(.
0000010: 0000 0100 0000 0100 0000 0100 1800 0000  ................
0000020: 0000 0400 0000 130b 0000 130b 0000 0000  ................
0000030: 0000 0000 0000 0000 0000                 ..........

ただし、それを引用符で囲むことはできません。どうすればいいですか?

4

3 に答える 3

4

これは、1x1 の黒い Windows BMP イメージの xxd ダンプです。

0000000: 424d 3a00 0000 0000 0000 3600 0000 2800  BM:.......6...(.
0000010: 0000 0100 0000 0100 0000 0100 1800 0000  ................
0000020: 0000 0400 0000 130b 0000 130b 0000 0000  ................
0000030: 0000 0000 0000 0000 0000                 ..........
于 2011-04-12T06:51:30.663 に答える
0

@Dan D.が言ったことを拡張すると、Linux(またはおそらくWindowsも)ボックスでImageMagickの「変換」コマンドを使用して、生データを画像に変換できます。私は .png でテストしました。Windows で出力を自分でテストする必要があります。

jcomeau@intrepid:~$ echo -en "\0000" | convert -size 1x1 -depth 8 gray:- /tmp/1black.bmp
jcomeau@intrepid:~$ xxd /tmp/1black.bmp
0000000: 424d 3a00 0000 0000 0000 3600 0000 2800 BM:.......6...(.
0000010: 0000 0100 0000 0100 0000 0100 1800 0000 ......
0000020: 0000 0400 0000 120b 0000 120b 0000 0000 ......
0000030: 0000 0000 0000 0000 0000 ..........
于 2011-04-12T07:03:37.163 に答える
0

それを印刷するには、たとえば unsigned char bmp[] ={ などの配列を作成し、この部分を上記の 16 進数で埋める必要があります。ただし、16 進数であるため、数値の各ペアの前に 0x を追加する必要があります。例: 0x42、0x4d など。これは {} ブラケットに含めることができます。たとえば unsigned char bmp[] ={ 0x42, 0x4d, 0x.... } 、書き込み関数を使用してソケットを介してこれを送信します。書き込み (ソケット、bmp、sizeof(bmp));

于 2013-04-28T11:37:15.177 に答える