Я использую библиотеку криптографии на основе сопряжения для реализации приложения. И я хочу сохранить элемент, позвонив
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)
хранить. Что я должен сделать, чтобы решить эту проблему.
Сначала необходимо выделить немного памяти, а затем передать адрес этой выделенной памяти функции 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);
Других решений пока нет …