1

10 進数で表された UUID (128 ビット数) を取得しました。これを C で数値形式に解析する必要があります。ターゲットのデータ構造は char[16] であり、bignum ライブラリを使用することはできません。誰かが適切なアルゴリズムを教えてくれますか?

4

1 に答える 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 に答える