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