10 進数で表された 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;
}
}
これは、乗算器 10 がユニット サイズよりも小さく、数値の長さが固定されているため、通常の bignum 演算よりも簡単です。
char よりも大きな単位 (例uint32_t
) で作業することで高速化できますが、それが必要であるとは思えませんが、c
それでも大きい場合 (例) です。uint64_t
于 2011-02-23T23:33:20.653 に答える