C语言格式化字节流

简介

在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;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值