gpt4 book ai didi

c - mpz_set_str 将 0 设置为 mpz_t

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:49 24 4
gpt4 key购买 nike

void decrypt_cert(mpz_t decrypted_cert, cert_message *cert, mpz_t key_exp, mpz_t key_mod) {
mpz_t certificate;
mpz_init(certificate);
puts(cert->cert); // Prints Hex values i.e 0x98A6C
mpz_set_str(certificate, cert->cert, HEX_BASE);
puts(mpz_get_str(NULL,16,certificate)); // Prints 0
perform_rsa(decrypted_cert, certificate, key_exp, key_mod);
}

在我上面的方法中。行号 1 puts(cert->cert); 打印 cert->cert 的正确值但是当我用这个值设置 certificate 并转换certificate 返回字符串 puts(mpz_get_str(NULL,16,certificate)); 打印出 0

知道我的代码有什么问题吗?

最佳答案

 mpz_set_str(certificate, cert->cert, HEX_BASE);

如果它以 0x 开头,将无法解析您的字符串。

你要么必须:

  • 传递 0 作为基数,在这种情况下,如果字符串以 0x 开头,mpz_set_str 会将字符串解析为十六进制
  • 将基数作为 16 传递并跳过 0x。即调用 mpz_set_str(certificate, &cert->cert[2], HEX_BASE);

下面是一个小示例程序,您可以通过传入例如“0x1234”与“1234”

#include <gmp.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int rc;
mpz_t certificate;
mpz_init(certificate);
rc = mpz_set_str(certificate, "1234", 16);
printf("mpz_set_str returned %d\n", rc);
puts(mpz_get_str(NULL,16,certificate));
return 0;

}

关于c - mpz_set_str 将 0 设置为 mpz_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26765751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com