2011-02-23 3 views
1

J'ai un UUID (nombre de 128 bits) représenté comme un nombre décimal et j'ai besoin de l'analyser en forme numérique en C. Ma structure de données cible est un char [16] et l'utilisation d'une bibliothèque bignum n'est pas une option . Quelqu'un peut-il me diriger vers un algorithme approprié?Comment analyser une chaîne UUID décimale dans C?

+2

Lorsque vous travaillez avec des uuids, vous travaillez avec RPC. Vous avez sûrement une bibliothèque de support d'exécution pour cela. Le nom commun de la fonction d'assistance est UuidFromString. –

+1

Cela permettrait d'analyser un uuid au format normal (aaaabbbb-cccc-dddd-eeee-ffffgggghhhh, hexadécimal). "Représenté comme un nombre décimal" n'est pas le format normal. – zwol

+4

Vous avez une chaîne contenant la représentation décimale? D'où est-ce que sa vient? Je déposerais une plainte! –

Répondre

1

L'algorithme naïf est assez simple:

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; 
    } 
} 

C'est plus simple qu'une opération bignum typique parce que le multiplicateur 10 est inférieure à la taille de l'unité et la longueur du numéro est fixé.

Vous pouvez accélérer en travaillant dans des unités plus grandes que char (par exemple uint32_t), aussi longtemps que c est plus grand encore (par exemple uint64_t), bien que je doute que ce soit nécessaire.