Наивный алгоритм довольно прост:
char number[] = "79625568443717255337188391839044322587";
unsigned char uuid[16] = { 0 };
for (char* n = number; *n; n++) {
unsigned c = *n - '0';
for (int i = 0; i < 16; i++) {
c += uuid[i] * 10;
uuid[i] = c % 256;
c /= 256;
}
}
Это проще, чем обычная операция bignum, поскольку множитель 10 меньше размера единицы, а длина числа фиксирована.
Вы можете ускорить его, работая в единицах большего размера, чем char (например, uint32_t
), если c
еще больше (например, uint64_t
), хотя я сомневаюсь, что это необходимо.