我有一个UUID(128位数)表示为十进制数,我需要在C中将其解析为数字形式。我的目标数据结构是char [16]并且使用bignum库不是选项。有人能指出我合适的算法吗?
答案 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
)来加快速度,但我怀疑这是必要的。