我试图将位移到bigints。 BigInt由一个字节数组表示,应该被解释为二进制补码中的单个整数N位。所以我想做一些像:
示例数组bigint: {0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}表示整数0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE(-2)N = 128位。
typedef unsigned char * BigInt;
当我尝试创建我的bigint时遇到错误
#include <stdlib.h>
void bi_init (int nbits)
{
nbytes = (nbits/8);
}
BigInt bi_new (int val)
{
BigInt new = (BigInt)malloc(nbytes*sizeof(unsigned char));
new=val --> problem, can someone give me a hint on how can i implement this array?
return novo;
}
答案 0 :(得分:3)
typedef unsigned char *BigInt;
BigInt *new = (BigInt)malloc(nbytes*sizeof(unsigned char));
您将new
声明为unsigned char**
,这是一个指针级别太多(并且您不应该在C中投射malloc
的结果)。
假设novo
和new
是同一个变量,并且只为该帖子翻译了一个匹配项,
从头= VAL
使用传入的val
覆盖刚刚分配的地址。
使用val
,
int i = 0;
// make it unsigned, so that right-shifting works correctly
unsigned int u_val = val;
while(u_val) {
new[i++] = u_val&0xFF;
u_val >>= 8;
}
然后仍有问题
nbytes = (nbits/8);
如果nbits
不是8的倍数,你分配的内存太少,那就
nbytes = (nbits+7)/8;