在C中序列化和反序列化int数组

时间:2018-05-23 19:56:01

标签: c

我有以下pesudo代码:

uint32_t int_array[500] = initialize(); //initialize fills array with data
serializeIntArray("./dump.raw", int_array);

另一项计划:

uint32_t *int_array_new;
int size = deserializeIntArray("./dump.raw", int_array_new);

如何实施serializeIntArraydeserializeIntArray

我尝试使用以下代码将数组转换为字符串:

char *int_array_to_string(uint32_t *src, size_t size)
{
    size_t numInt = size * sizeof(uint32_t);
    char *intAsChars = (char *)src;
    char *chars = malloc(numInt + sizeof(char));
    chars[size] = '\0';
    memcpy(chars, intAsChars, numInt + sizeof(char));
    return chars;
}

uint32_t *string_to_int_array(char *src, size_t size)
{
    size_t numInt = size * sizeof(char);
    uint32_t *charAsInt = (uint32_t *)src;
    uint32_t *ints = malloc(numInt);
    memcpy(ints, charAsInt, numInt);
    return ints;
}

但他们产生不同的产出。

PS。在嵌入式系统中执行此操作,因此除了libc之外没有库。

PS。序列化格式需要二进制才能避免开销。

1 个答案:

答案 0 :(得分:0)

只需(f)写下来:

#include <stdint.h>
#include <stdio.h>
int serialize(char const*Fnm, void const*Data, size_t Sz)
{
    FILE *f;
    if(!(f=fopen(Fnm, "wb")))
        return -1;
    if(Sz!=fwrite(Data,1,Sz,f))
    { fclose(f); return -1; }
    if(EOF==fclose(f)) return -1;
    return 0;
}
int main()
{
    uint32_t int_array[500]={0};
    if(0>serialize("./dump.raw", int_array, sizeof int_array))
        { perror(0); return 1; }
    return 0;
}