C中的大数字 [英] Big numbers in C
本文介绍了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屋!
查看全文