简介
在Linux套接字编程中,发送的都是void类型的数据,本质上可以看成字节流,因为我们一般是发送的char的数据。那么,这样就涉及到一个问题,如果我们的数据不是字符串,而是整型、浮点型和更加复杂的结构体,那么此时就需要对这些结构进行格式化。
一般通过snprintf
把数据写入到指定的流中,这个函数比sprinitf
更安全,因为增加了最大缓冲区的限制。然后通过sscanf
读取数据。只要保证数据写入和读出的格式是匹配的,而且有足够的缓冲区,那么就可以完成数据的收发。
注意点:两个格式化函数的格式化格式中,一定要用空格分隔开相邻的数据!!!
代码实例
定义一个Info
类型,然后通过流的方式,把info
的数据赋值给info1
,然后输出结果进行检验。
#include <stdio.h>
#include <string.h>
struct Info {
int i;
float f;
double d;
char str[3];
};
int main() {
Info info;
info.i = 1;
info.f = 2.0f;
info.d = 3.0;
info.str[0] = 'a';
info.str[1] = 'b';
info.str[2] = 'c';
char buf[1024];
// 写入数据,注意空格
snprintf (buf, 1024, "%d %f %lf %s", info.i, info.f, info.d, info.str);
Info info1;
// 读取数据,注意空格
sscanf (buf, "%d %f %lf %s", &info1.i, &info1.f, &info1.d, info1.str);
printf ("%d, %f, %lf, %s\n", info1.i, info1.f, info1.d, info1.str);
printf ("%d, %d, %d\n", sizeof (info), sizeof (info1), strlen (buf) );
return 0;
}