将Biginteger转换为Bytearray(原始数据)

时间:2010-01-11 07:47:06

标签: iphone c objective-c

我使用以下代码将bigint转换为bytearray(原始数据),但结果错了。

这里的错误是什么?

我在Apple Mac上尝试这个(适用于Iphone应用) COMP_BYTE_SIZE是4

是否存在bigendian / little endian问题,请帮助。

void bi_export(BI_CTX *ctx, bigint *x, uint8_t *data, int size)
{
    int i, j, k = size-1;

    check(x);
    memset(data, 0, size);  /* ensure all leading 0's are cleared */

    for (i = 0; i < x->size; i++)
    {
        for (j = 0; j < COMP_BYTE_SIZE; j++)
        {
            comp mask = 0xff << (j*8);
            int num = (x->comps[i] & mask) >> (j*8);
            data[k--] = num;

            if (k < 0)
            {
                break;
            }
        }
    }

感谢。

2 个答案:

答案 0 :(得分:0)

参数大小至少为x-> size * 4,即。目标数组够大吗?也可以使用

comp mask = (comp)0xff << (j*8);

答案 1 :(得分:0)

num应在复制之前转换为uint8_t

data[k--] = (uint8_t)num;