#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(void)
{
void *ptr = alloca(8);
memcpy(ptr, (char[]){'9', '8', '7', '6', '5', '4', '3', '2'}, 8 * sizeof(char));
uint64_t* a = ptr;
*a =((*a & 0x0F000F000F000F00)>>8) +
    ((*a & 0x000F000F000F000F)*10);

*a = 1000000 * ((*a >> 0 ) & 0xFF) +
       10000 * ((*a >> 16) & 0xFF) +
         100 * ((*a >> 32) & 0xFF) +
               ((*a >> 48) & 0xFF);
//little-endian only. Можно переделать под big-endian
printf("%"PRIu64, *a);

return 0;
}