我正在尝试将位图文件写入C中的浏览器。 我可以像这样编写可打印的ascii部分,
write (socket, "BM", 2);
但是如何用十进制值写出不可打印的? 我知道,如果我写一个文件,我可以使用这样的东西,
fprintf(fp, "%c%c%c%c" , 40,0,0,0);
但我不知道如何做同样的事情,而只是把它写到套接字...... 请帮帮我,谢谢。
答案 0 :(得分:4)
您可以使用FILE
将文件描述符包装在printf
结构中(从而允许使用所有fdopen()
系列):
int fd = socket(...);
FILE *fp = fdopen(fd, "w+");
现在,fp
就像任何其他文件*一样。干杯!
答案 1 :(得分:4)
如果您要编写的字节是静态的,您只需定义一个缓冲区并使用它......
char buffer[]={40,0,0,0};
write(socket, buffer, sizeof(buffer));
或内联...
write(socket, (char[]){40,0,0,0}, 4);
最好的方法取决于字符来自哪里(它们是动态的/它们已经在缓冲区中),有多少,是否要进行编码,size元素来自哪里等等..
答案 2 :(得分: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);
答案 3 :(得分:1)
您可以将值snprintf
放入char缓冲区,然后write
输出缓冲区。