我有一个表示为十进制数的 UUID(128 位数字),我需要将其解析为 C 中的数字形式。我的目标数据结构是 char[16],不能选择使用 bignum 库。有人可以指出一个合适的算法吗?
问问题
1117 次
1 回答
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 小于单元大小并且数字长度是固定的。
您可以通过使用比 char 更大的单位(例如 )来加速它uint32_t
,只要它c
仍然更大(例如uint64_t
),尽管我怀疑这是必要的。
于 2011-02-23T23:33:20.653 回答