gpt4 book ai didi

将 ull 转换为 mpz_t

转载 作者:行者123 更新时间:2023-11-30 17:48:43 25 4
gpt4 key购买 nike

我看到了问题mpz_t to unsigned long long conversion (gmp lib)的帖子Chris Jester-Young 给了我答案

mpz_t ull2mpz(unsigned long long ull)
{
char buf[40];
int len;
mpz_t result;

len = snprintf(buf, sizeof buf, "%llx");
if (len >= sizeof buf) { /* oops */ }
mpz_init(result);
len = gmp_sscanf(buf, "%Zx", result);
if (len != 1) { /* oops */ }
return result;
}

这里的问题是,如 How to convert GMP C parameter convention into something more natural? 中所述。 mpz_t 是一个数组。我怎样才能绕过这个(不做这些奇怪的事情,只是返回一个值)?如果我改为写

void mpz_set_ull(mpz_t val, unsigned long long ull){
char buf[40];
int len;
mpz_t result;

len = snprintf(buf, sizeof buf, "%llx");
if (len >= sizeof buf) { /* oops */ }
mpz_init(result);
len = gmp_sscanf(buf, "%Zx", result);
if (len != 1) { /* oops */ }
mpz_set(val,result);
}

我得到了错误的结果。

而且,他的代码是合法的 C 语言吗?

最佳答案

OP 未正确使用 snprintf()。需要通过ull

使用

char buf[sizeof(ull)*CHAR_BIT/3 + 2];  // let the sizeof `buf` be sized per `ull` needs
...
snprintf(buf, sizeof buf, "%llx", ull); // Add missing `ull`

关于将 ull 转换为 mpz_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18416425/

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