2011-02-23 21 views
1

我有一個用十進制數表示的UUID(128位數字),我需要在C中將它解析爲數字形式。我的目標數據結構是char [16],使用bignum庫不是一個選項。有人可以指點我一個合適的算法嗎?如何解析C中的十進制UUID字符串?

+2

當您使用uuids時,您可以使用RPC。當然你有一個運行時支持庫。輔助函數的通用名稱是UuidFromString。 – 2011-02-23 21:17:17

+1

這將解析正常格式的uuid(aaaabbbb-cccc-dddd-eeee-ffffgggghhhh,十六進制)。 「以十進制數表示」不是正常的格式。 – zwol 2011-02-23 21:38:26

+4

你有一個包含十進制表示的字符串嗎?這個是從哪裏來的?我會提出投訴! – 2011-02-23 21:43:15

回答

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比單元尺寸和數量長度是固定的。

只要c仍然較大(例如uint64_t),儘管我懷疑這是必要的,但您可以通過使用比字符大的單位(例如uint32_t)加速它。

相關問題