下面的函数在调用html时只提供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的回答,十六进制数据如下:
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 ..........
但是,我根本无法将其放在引号内。我该怎么做?
答案 0 :(得分: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 ..........
答案 1 :(得分: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 ..........
答案 2 :(得分:0)
要打印出来,您需要创建一个数组
例如unsigned char bmp [] = {
并在此处用十六进制填充此部分。但是因为它是十六进制的,所以需要在每对数字的前面添加0x。
例如。
0x42,0x4d
等等。
这可以包含在{}括号中。
例如。
unsigned char bmp[] ={
0x42, 0x4d, 0x....
}
然后使用write函数通过套接字发送它。
write(socket,bmp,sizeof(bmp));