Как мне разобрать десятичную строку UUID в C? - PullRequest
1 голос
/ 24 февраля 2011

У меня есть UUID (128-битное число), представленное в виде десятичного числа, и мне нужно проанализировать его в числовой форме в C. Моя целевая структура данных - это char [16], и использование библиотеки bignum не является вариант. Может кто-нибудь указать мне на подходящий алгоритм?

1 Ответ

1 голос
/ 24 февраля 2011

Наивный алгоритм довольно прост:

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), хотя я сомневаюсь, что это необходимо.

...