2011-06-09 69 views
1

我有一個問題,導入/導出 GMP功能。 我嘗試轉換一個負值和正值大整數,但是當我使用負數 我失去了標誌。 有沒有關於它的例子?GMP IMPORT/EXPORT

出口:

    int mydim = (mpz_sizeinbase(c, 2) +7)/ 8; 
        myb = (char*) malloc(sizeof(char) * mydim); 
        count = (size_t*) malloc(sizeof(size_t)); 

        if(mpz_sgn(c)>=0){ 
        mpz_export((void *) myb, count, 1, sizeof(char), 1, 0, c); 
          } 
          else{ 
        mpz_add_ui(c,c,1); 
        mpz_export((void*)myb, count, 1, sizeof(char), 1, 0, c); 
        for(int i =0;i<=mydim;i++){ //This could be done more effectively 
          myb[i]=~myb[i]; 
        } 
        } 

導入:

  mpz_import(s, *count, 1, sizeof(myb[0]), 1, 0, myb); 
      int sign = myb[0] < 0?-1:1; 
      if(sign == -1) 
        mpz_neg(s,s); 
+0

如何聲明'myb'?如果它是'char *',請檢查您的平臺上是否簽署了'char'。 – Nemo 2011-06-09 13:35:36

+0

char被簽名。如果我在我的應用程序中使用char,結果總是消極的。如果我使用無符號字符的結果總是積極的 – Gianluca 2011-06-09 14:03:03

回答

-1

mpz_export documentation說:

運算的符號被忽略,被用來只是絕對值。

+0

是的,我讀了,但我想找到一個解決方案 – Gianluca 2011-06-09 14:18:09

+0

如果mpz_export只存儲絕對值,爲什麼會期望看到一個符號位?絕對值會丟失信息,所以您需要自行分別存儲符號位... – Nemo 2011-06-09 14:19:03