преобразование Biginteger в Bytearray (необработанные данные) - PullRequest
0 голосов
/ 11 января 2010

Я использовал следующий код для преобразования bigint в десятичном виде в bytearray (необработанные данные), но я получаю неправильный результат.

В чем здесь ошибка?

Я пытаюсь это сделать в Apple Mac (для приложения Iphone) COMP_BYTE_SIZE равно 4

Есть ли какие-либо проблемы с порядковым порядком байтов / байтов, пожалуйста, помогите.

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 голосов
/ 11 января 2010

num должно быть приведено к uint8_t перед копированием

data[k--] = (uint8_t)num; 
0 голосов
/ 11 января 2010

Размер аргумента не менее x-> size * 4, т.е. целевой массив достаточно большой? Также используйте

comp mask = (comp)0xff << (j*8);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...