-1

我试图实现到 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 无符号字符 *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;
    }
4

1 回答 1

3
typedef unsigned char *BigInt;

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

您声明newunsigned char**,这是一级指针太多(并且您不应该malloc在 C 中转换结果)。

假设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;
于 2012-09-24T20:13:06.010 回答