C和libgcrypt。Str输入gcry\u error\t。然后加上

C和libgcrypt。Str输入gcry\u error\t。然后加上,c,types,libgcrypt,C,Types,Libgcrypt,我正在尝试将字符串“255”中的数字转换为gcry\u mpi\u t类型。 gcry\u mpi\u dump show me 323535而不是gcry\u mpi\u add和gcry\u mpi\u print(GCRYMPI\u FMT\u USG…)无法正常工作 #include <gcrypt.h> #include <assert.h> #include <stdio.h> #include <string.h> const c

我正在尝试将字符串“255”中的数字转换为gcry\u mpi\u t类型。 gcry\u mpi\u dump show me 323535而不是gcry\u mpi\u add和gcry\u mpi\u print(GCRYMPI\u FMT\u USG…)无法正常工作

#include <gcrypt.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>


const char *byte_to_binary(int x)   
{
    static char b[9];
    b[0] = '\0';

    int z;
    for (z = 128; z > 0; z >>= 1) {
        strcat(b, ((x & z) == z) ? "1" : "0");
    }

    return b;
}





int main() {

gcry_mpi_t max_ul = gcry_mpi_new(64);         
gcry_mpi_t mul = gcry_mpi_new(128);                    
gcry_mpi_t cript_prime;

char mybignum[5] = {0}; 

cript_prime = gcry_mpi_new(5);

mybignum[0] ='2';
mybignum[1] ='5';
mybignum[2]='5';


printf("First %s\n", mybignum);


char buffer[60] = {0}; 

size_t scanned = 0; 

strcpy(mybignum, "255"); 
gcry_mpi_scan(&max_ul, GCRYMPI_FMT_USG, &mybignum, 5, NULL);

printf("read : %ld \n", scanned);


printf(" max_ul is  ");

gcry_mpi_dump(max_ul); printf("\n");

gcry_mpi_add(mul,max_ul,max_ul );

printf(" mul is ");
// выводим на экран
gcry_mpi_dump(mul); printf("\n");



gcry_mpi_print(GCRYMPI_FMT_USG, buffer, 30 ,  &scanned, mul);

printf("\nwrite : %ld \n", scanned);

printf("\n output the line %s \n", buffer);

for (int i=0; i<10  ; i++)
{
    printf("%s\n",byte_to_binary(buffer[i]) );
}


printf(" \n mul is: ");



gcry_mpi_dump(mul); printf("\n");





gcry_mpi_release(mul);
gcry_mpi_release(max_ul);
printf("____________________________________\n");


 return 0 ; 
}
#包括
#包括

gcc版本9.3.0(Ubuntu 9.3.0-17ubuntu1~20.04)

使用命令编译。 gcc test.c-lgcrypt

如果您有这种类型的示例,我想看看。

的文档说明:

转换存储在缓冲区中的整数的外部表示形式…
格式描述存储在中的MPI的格式 缓冲区:…
GCRYMPI\u FMT\u USG
简单无符号整数

这确实有点不清楚,因此您将外部表示误解为ASCII十进制表示;实际上,它意味着存储在内存中的整数表示。因此,要将数字255存储在
char mybignum[5]
中并进行转换,您可以编写:

*mybignum = 255;
gcry_error_t error = gcry_mpi_scan(&max_ul, GCRYMPI_FMT_USG, mybignum, 1, &scanned);
因此,
gcry\u mpi\u print(GCRYMPI\u FMT\u USG,buffer,30,&scanned,mul)
将mpi a转换为不适合使用
printf(“\n输出行%s\n”,buffer)
打印到gcry\u mpi\t的表示

我使用的最好方法是:

    gcry_mpi_t p = gcry_mpi_new(0);
    gcry_mpi_scan(&p, GCRYMPI_FMT_HEX, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0, 0);


然后一切都好。

谢谢你的回答!