对于一个大学项目,我正在研究 RSA-CRT 实现。我使用 mini-gmp,它是 GMP 库的一个子集,用于处理大整数。
该项目的目标是在 STM32F103 微 Controller 上运行程序,我想将其与 ARM mbed 框架一起使用。
问题是我无法正确地将大整数打印到串行控制台进行调试。这是我的代码的一个最小工作示例:
#include <mbed.h>
#include <mini-gmp.h>
//SETUP
Serial pc(USBTX, USBRX); // enable serial communication, tx, rx
int main(){
pc.baud (115200);
printf("STARTING\n\r");
mpz_t n;
mpz_init_set_ui(n,11242342351435632235235464577);
mpz_out_str(stdout, 10, n);
printf("\nFINISHED\n\r");
}
当使用 PlatformIO 编译并在微 Controller 上运行时,我在串行控制台中得到了这个:
STARTING
3485947265
FINISHED
我注意到打印出来的数字总是 10 位,并且以 3 开头,其余数字随 n 的值而变化。所以它看起来不像是某种溢出。
这里有人可以帮我吗?
最佳答案
mpz_init_set_ui()
的原型(prototype)是
void mpz_init_set_ui (MP_INT *dest_integer, unsigned long int src_ulong);
它需要一个 unsigned long
参数,在这个平台上它是 32 位长。 C 常量在传递给 到 mpz_init_set_ui()
之前被截断为 32 位。
11242342351435632235235464577 mod (2^32) = 3485947265,这就是你得到的。
您应该使用可以使用任意精度参数对其进行初始化的函数,例如 mpz_init_set_str()
。
关于c - 使用 mbed 框架在 STM32 上运行 GMP 的串行 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50023939/