如何在C中使用Write()写出字符?

时间:2011-04-11 10:08:37

标签: c sockets bmp

我正在尝试将位图文件写入C中的浏览器。 我可以像这样编写可打印的ascii部分,

write (socket, "BM", 2);

但是如何用十进制值写出不可打印的? 我知道,如果我写一个文件,我可以使用这样的东西,

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

但我不知道如何做同样的事情,而只是把它写到套接字...... 请帮帮我,谢谢。

4 个答案:

答案 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输出缓冲区。