如何在PBC中存储序列化元素?

时间:2018-03-07 06:08:34

标签: c++ c serialization jsoncpp jpbc

我正在使用基于配对的加密lib来实现一个应用程序。我想通过调用

来存储元素
int element_length_in_bytes(element_t e)

int element_to_bytes(unsigned char *data, element_t e)

问题是值存储在unsigned char *类型中。所以我不知道如何将它存储在一个文件中。

我尝试将其强制转换为char *并使用名为jsoncpp的库来存储。但是,当我使用Json::Value((char *)data)保留时,该值不正确。我该怎么做才能解决这个问题。

1 个答案:

答案 0 :(得分:0)

您需要先分配一些内存,然后将此分配内存的地址传递给element_to_bytes()函数,该函数将元素存储在您分配的内存中。

你怎么知道要分配多少字节?使用element_length_in_bytes()。

int num_bytes = element_length_in_bytes(e);
/* Handle errors, ensure num_bytes > 0 */

char *elem_bytes = malloc(num_bytes * sizeof(unsigned char));
/* Handle malloc failure */

int ret = element_to_bytes(elem_bytes, e);
/* Handle errors by looking at 'ret'; read the PBC documentation */

此时,您将元素呈现为位于elem_bytes中的字节。将它写入文件的最简单方法是使用open()/ write()/ close()。如果有一些特定的原因你必须使用jsoncpp,那么你必须阅读jsoncpp的文档,了解如何编写一个字节数组。请注意,您调用的任何方法都必须询问正在写入的字节数。

在这里使用open()/ write()/ close()是这样的:

int fd = open("myfile", ...)
write(fd, elem_bytes, num_bytes);
close(fd);

完成后,你必须释放你分配的内存:

free(elem_bytes);