gpt4 book ai didi

c - 如何使用 C 和 GMP Bignum 将任意原始数据转换为整数

转载 作者:行者123 更新时间:2023-11-30 16:01:54 26 4
gpt4 key购买 nike

我正在用 GNU Bignum 编写一个程序,我想做的就是简单地读取一个二进制文件,并将原始数据用作 Bignum 整数,但是每当我读取这个文件时,即使它大约有 2MB 长,并尝试打印它给我的数字一个非常小的数字,如 67 或 300,我用不同的文件尝试过,它的行为都是相同的。下面的源代码可能会让你们了解我在说什么。

#include <stdlib.h>
#include <stdio.h>
#include <gmp.h>
#include <string.h>


int main()
{
mpz_t data_in;
mpz_t data_out;
FILE *in_file;
FILE * out_file;
unsigned long file_length;
void* data;

//initialize data
mpz_init(data_in);
mpz_init(data_out);

in_file = fopen("main.c","rb");
out_file = fopen("out.txt","wb");

//get file length.
fseek(in_file,0,SEEK_END);
file_length = ftell(in_file);
fseek(in_file,0,SEEK_SET);

//allocate memory.
data = malloc(file_length);

//read file into memory.
fread(data,file_length,1,in_file);
//check to see if the first byte is zero
/*if(data[1]== 0)
{
printf(" first byte zero\n");
}
else
{
printf("first byte OK\nFile length %lu\n Data read %d\n",file_length,strlen(data));
}
*/

//import data as integer.
mpz_import(data_in,1,file_length,sizeof(data[0]),0,0,data);

//output number in the screen
gmp_printf(" Data is %Zd\n",data_in);
mpz_out_str(NULL,10,data_in);


fclose(in_file);
fclose(out_file);


return 0;

}

这里可能出了什么问题?

最佳答案

我认为你有 mpz_import 的第二个和第三个参数相反,我想你想要这个(为了清楚起见,有丑陋的评论):

mpz_import(
data_in, /* mpz_t rop */
file_length, /* size_t count */
1, /* int order */
sizeof(data[0]), /* int size */
0, /* int endian */
0, /* size_t nails */
data /* const void *op */
);

反转第二个和第三个参数的结果将是 mpz_import 读取的数据少于您想要的数据,因此您的值较小。

关于c - 如何使用 C 和 GMP Bignum 将任意原始数据转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5846367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com