创建一个大的int

时间:2012-09-24 20:01:22

标签: c

我试图将位移到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;
    }

1 个答案:

答案 0 :(得分:3)

typedef unsigned char *BigInt;

BigInt *new = (BigInt)malloc(nbytes*sizeof(unsigned char));

您将new声明为unsigned char**,这是一个指针级别太多(并且您不应该在C中投射malloc的结果)。

假设novonew是同一个变量,并且只为该帖子翻译了一个匹配项,

从头= 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;