3

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

write (socket, "BM", 2);

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

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

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

4

4 回答 4

4

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

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

现在,fp就像任何其他 FILE*. 干杯!

于 2011-04-11T10:11:31.337 回答
4

如果您要写入的字节是静态的,您可以简单地定义一个缓冲区并使用它......

char buffer[]={40,0,0,0};
write(socket, buffer, sizeof(buffer));

或内联...

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

最好的方法取决于字符来自哪里(它们是动态的/它们是否已经在缓冲区中),有多少,是否要进行编码,大小元素来自哪里......等等。

于 2011-04-11T13:29:28.303 回答
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);

于 2011-04-11T10:14:39.137 回答
1

您可以snprintf将值放入 char 缓冲区,然后write从缓冲区中取出。

于 2011-04-11T10:11:45.097 回答