Используйте функцию strtoull
для преобразования строки в число в данной базе.Затем просто сдвиньте нужные байты.Например:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
unsigned long long res = strtoull("DABC95C1", NULL, 16);
printf("%hhx, %hhx, %hhx, %hhx",
(unsigned char)res,
(unsigned char)((res >> 8) & 0xFF),
(unsigned char)((res >> 16) & 0xFF),
(unsigned char)((res >> 24) & 0xFF)
);
return 0;
}
Результат:
c1, 95, bc, da
Демо
Примечания:
Поскольку вам необходимо получить массив байтов, у вас может возникнуть соблазн сделать что-то вроде
uint8_t *arr = (uint8_t*)&res;
Но здесь есть два предостережения:
1) I is нарушение строгого правила алиасинга (вы можете как-то обойти его, заменив uint8_t
на char
)
2) Порядок возвращаемых байтов будет зависеть от реализации (зависит от порядка байтов) и, следовательно, не будет переносимым.Также обратите внимание, что результат равен unsigned long long
, так что вы можете получить дополнительные нули заполнения как в начале массива, так и в его конце.