C OpenSSL中错误的BIGNUM初始化

C OpenSSL中错误的BIGNUM初始化,c,openssl,bignum,C,Openssl,Bignum,我有这样一个代码: BIGNUM *p = BN_new(), *B = BN_new(), *a = BN_new(), *ret = BN_new(); BN_bin2bn((uchar*)"\x01\x02\0x03\0",3,p); BN_bin2bn((uchar*)"\x02\x03\0x04\0",3,B); BN_bin2bn((uchar*)"\x03\x04\0x05\0",3,a); Print_Format("p: %s",BN_bn2dec(p)); //expec

我有这样一个代码:

BIGNUM *p = BN_new(), *B = BN_new(), *a = BN_new(), *ret = BN_new();

BN_bin2bn((uchar*)"\x01\x02\0x03\0",3,p);
BN_bin2bn((uchar*)"\x02\x03\0x04\0",3,B);
BN_bin2bn((uchar*)"\x03\x04\0x05\0",3,a);

Print_Format("p: %s",BN_bn2dec(p)); //expected: 66051, prints 66048
Print_Format("B: %s",BN_bn2dec(B)); //expected: 131844, prints 131840
Print_Format("a: %s",BN_bn2dec(a)); //expected: 197637, prints 197632
010203 => 010200
020304 => 020300
030405 => 030400
打印出来的结果是错误的。当我将代码给出的结果转换为十六进制数时,它如下所示:

BIGNUM *p = BN_new(), *B = BN_new(), *a = BN_new(), *ret = BN_new();

BN_bin2bn((uchar*)"\x01\x02\0x03\0",3,p);
BN_bin2bn((uchar*)"\x02\x03\0x04\0",3,B);
BN_bin2bn((uchar*)"\x03\x04\0x05\0",3,a);

Print_Format("p: %s",BN_bn2dec(p)); //expected: 66051, prints 66048
Print_Format("B: %s",BN_bn2dec(B)); //expected: 131844, prints 131840
Print_Format("a: %s",BN_bn2dec(a)); //expected: 197637, prints 197632
010203 => 010200
020304 => 020300
030405 => 030400
为什么
BN_bin2n
忽略输入的最后一个字节?有人知道吗?

错误在:

BN_bin2bn((uchar*)"\x01\x02\**0x03**\0",3,p);
BN_bin2bn((uchar*)"\x02\x03\**0x04**\0",3,B);
BN_bin2bn((uchar*)"\x03\x04\**0x05**\0",3,a);
应该是

BN_bin2bn((uchar*)"\x01\x02\x03\0",3,p);
BN_bin2bn((uchar*)"\x02\x03\x04\0",3,B);
BN_bin2bn((uchar*)"\x03\x04\x05\0",3,a);

好的,我看到打字错误了。如果有人想要分数,我会让他们回答:)