如何使用C和GMP_Bignum将任意原始数据转换为整数

如何使用C和GMP_Bignum将任意原始数据转换为整数,c,gnu,bignum,C,Gnu,Bignum,我正在用GNU Bignum编写一个程序,我想做的是简单地读取一个二进制文件,并将原始数据用作Bignum整数,但每当我读取这个文件时,即使它大约2MB长,并试图打印出一个数字,它给我一个非常小的数字,如67或300,我用不同的文件进行了尝试,结果都是一样的。 下面的源代码可能会让你们知道我在说什么 #include <stdlib.h> #include <stdio.h> #include <gmp.h> #include <string.h>

我正在用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;

}
#包括
#包括
#包括
#包括
int main()
{
mpz_t数据_in;
数据输出;
文件*在_文件中;
文件*输出文件;
无符号长文件长度;
作废*数据;
//初始化数据
mpz_init(数据_in);
mpz_init(数据输出);
in_file=fopen(“main.c”、“rb”);
out_file=fopen(“out.txt”、“wb”);
//获取文件长度。
fseek(在文件中,0,SEEK\u END);
文件长度=ftell(在文件中);
fseek(在_文件中,0,SEEK_集);
//分配内存。
数据=malloc(文件长度);
//将文件读入内存。
fread(数据,文件长度,1,在文件中);
//检查第一个字节是否为零
/*如果(数据[1]==0)
{
printf(“第一字节零\n”);
}
其他的
{
printf(“第一字节正常\n文件长度%lu\n数据读取%d\n”,文件长度,strlen(数据));
}
*/
//以整数形式导入数据。
mpz_导入(数据输入,1,文件长度,大小(数据[0]),0,0,数据);
//在屏幕上输出数字
gmp_printf(“数据为%Zd\n”,数据位于);
mpz_out_str(空,10,数据_in);
fclose(在_文件中);
fclose(输出文件);
返回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 */
);