c/c++语言开发共享将ull转换为mpz_t

我看到问题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

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐