我有以下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);
如何实施serializeIntArray
和deserializeIntArray
?
我尝试使用以下代码将数组转换为字符串:
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。序列化格式需要二进制才能避免开销。
答案 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;
}