天天看點

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

           

繼續閱讀