Преобразование массива длинных символов в байтовый массив - PullRequest
1 голос
/ 26 января 2011

Как я могу преобразовать массив чисел в массив байтов? Пример:

char *digit="3224833640520308023"//long long array 

преобразовать в:

uint8_t buff[256]= {0x2c, 0xc0, 0xe9, 0x1c, 0x32, 0xf1, 0x55, 0x37, 0};

(2c c0 e9 1c 32 f1 55 37)

Ответы [ 2 ]

1 голос
/ 26 января 2011

Я напечатал в обратном порядке в конце.Вы можете захотеть использовать endian swap, если вам нужен массив в этом порядке.

0 голосов
/ 26 января 2011

strtoull преобразует строку во внутреннее 64-битное представление.

htobe64 при необходимости переключит порядок байтов в обратный порядок (тот, который вы использовали в вашем примере) на вашей платформе.

Вызатем можно скопировать 8 байтов из этой 64-битной переменной с прямым порядком байтов в ваш байтовый массив.

#include <stdint.h>
#include <endian.h>
#include <stdio.h>
#include <string.h>

char *digit="3224833640520308023";

main ()
{
    uint64_t ull;
    uint64_t beull;
    uint8_t buff[8];
    int i;

    ull=strtoull(digit,0,10);
    beull=htobe64(ull);
    memcpy(buff,&beull,8);
    for(i=0;i<8;i++)
    {
        printf("%02x\n",buff[i]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...