C中的大数字 [英] Big numbers in C

查看:92
本文介绍了C中的大数字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用C实现RSA.我使用的是"unsigned long long int"(上限:18446747007370955115).

I'm implementing RSA in C. I'm using "unsigned long long int" (Top limit: 18446744073709551615).

当我不得不计算诸如 4294967296 ^ 2 之类的问题时,问题就来了.应该是 18446744073709551616 ,但我却得到 0(溢出).我的意思是,我需要计算结果超出上限的东西.

The problems come when I have to calculate thing like 4294967296 ^ 2. It should be 18446744073709551616, but I get 0 (overflow). I mean, I need to calculate things that result is over the top limit.

我尝试使用float,double,long double,但结果不正确.

I've tried using float, double, long double, but the results are incorrect.

示例:

4294967000.0 * 4294967000.0 the result is 18446741874686296064.0
but it should be 18446741531089000000

推荐答案

Openssl示例:

Openssl example:

#include <stdio.h>
#include <openssl/bn.h>
/* compile with -lcrypto */
int main ()
{
 char p_sa[] = "4294967296";
 char p_sb[] = "4294967296";
 BN_CTX *c = BN_CTX_new();
 BIGNUM *pa = BN_new();
 BIGNUM *pb = BN_new();
 BN_dec2bn(&pa, p_sa);
 BN_dec2bn(&pb, p_sb);
 BN_mul (pa,pb, pa,c);
 char * number_str = BN_bn2hex(pa);
 printf("%s\n", number_str);
 OPENSSL_free(number_str);
 BN_free(pa);
 BN_free(pb);
 BN_CTX_free(c);
 return 0;
}

这篇关于C中的大数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆