在C语言中,如何使用Write()函数输出字符?

3
我将尝试使用C语言将位图文件写入浏览器。 我可以像以下这样写可打印的ASCII部分:
write (socket, "BM", 2);

但是,我如何使用十进制值编写不可打印字符呢? 我知道如果我要写入文件,可以使用类似以下的方法:

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

但我不知道如何仅将其写入套接字中,而不是在控制台上输出...请帮帮我,谢谢。
4个回答

4
如果您要写入的字节是静态的,则可以简单地定义一个缓冲区并使用它...
char buffer[]={40,0,0,0};
write(socket, buffer, sizeof(buffer));

或者内联...

write(socket, (char[]){40,0,0,0}, 4);

最佳方法取决于字符的来源(它们是动态的/已经在缓冲区中)、它们的数量、是否需要编码、大小元素的来源等等。


4

您可以使用fdopen()将文件描述符包装在FILE结构中(从而启用所有printf系列函数):

int fd = socket(...);
FILE *fp = fdopen(fd, "w+");

现在,fp 就像任何其他的 FILE* 一样。干杯!

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);即可。


谢谢,有没有不使用另一个函数的方法?我的意思是更简单的方法。 - Alex

1
你可以使用snprintf将值格式化到字符缓冲区中,然后再将其写入输出流中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接