如何在C中解析十进制UUID字符串?

时间:2011-02-23 21:13:35

标签: c algorithm parsing string bignum

我有一个UUID(128位数)表示为十进制数,我需要在C中将其解析为数字形式。我的目标数据结构是char [16]并且使用bignum库不是选项。有人能指出我合适的算法吗?

1 个答案:

答案 0 :(得分:1)

天真的算法非常简单:

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小于单位大小并且数字长度是固定的。

只要uint32_t仍然更大(例如c),您可以通过使用比char更大的单位(例如uint64_t)来加快速度,但我怀疑这是必要的。