我在问题mpz_t 到 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;
}
这里的问题是,如如何将 GMP C 参数约定转换为更自然的东西?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 吗?