将结构写入缓冲区

时间:2018-06-29 18:25:39

标签: c serialization struct buffer

我试图理解在C中可以对数据进行序列化和反序列化的过程。我编写了代码,我相信应该将一个简单的结构写入char缓冲区。

#include <packet.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>


typedef struct
{
        int A;
        int B;
        int C;
}test_packet;

int main(int argc, char** argv)
{
        test_packet p;
        p.A = 1;
        p.B = 2;
        p.C = 3;

        char buffer [sizeof(p)];
        memcpy(buffer, &p, sizeof(p));
        printf("%x \n", buffer);

        return 0;
}

但是,当我运行此代码时,由于要序列化的结构是静态编码的,因此我希望每次看到的缓冲区都是相同的。我没有,我看到一个缓冲区,里面似乎充满了随机数据:

./SerializePacket
41bf5380
./SerializePacket
d89fc790
./SerializePacket
aea2c00
./SerializePacket
d355dc10

有人可以缓解我在这里的无知吗?

1 个答案:

答案 0 :(得分:0)

您要打印的是一个指针,即缓冲区的地址。

关于序列化:您要在缓冲区上复制结构,使用填充和全部。除非您在同一台计算机上进行序列化和反序列化,否则它不是便携式的。要序列化直接复制到缓冲区的结构,应使用压缩结构(请参见:What is a "packed" structure in C?https://en.wikipedia.org/wiki/Data_structure_alignment)。另外,对于序列化数据,首选使用固定大小的整数,例如对于uint16_t表示16位无符号整数。