我看到问题mpz_t的post到无符号长时间转换(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吗?
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`
以上就是c/c++开发分享将ull转换为mpz_t相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522982.html