1
我有一個用十進制數表示的UUID(128位數字),我需要在C中將它解析爲數字形式。我的目標數據結構是char [16],使用bignum庫不是一個選項。有人可以指點我一個合適的算法嗎?如何解析C中的十進制UUID字符串?
我有一個用十進制數表示的UUID(128位數字),我需要在C中將它解析爲數字形式。我的目標數據結構是char [16],使用bignum庫不是一個選項。有人可以指點我一個合適的算法嗎?如何解析C中的十進制UUID字符串?
天真的算法是相當簡單:
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
)加速它。
當您使用uuids時,您可以使用RPC。當然你有一個運行時支持庫。輔助函數的通用名稱是UuidFromString。 – 2011-02-23 21:17:17
這將解析正常格式的uuid(aaaabbbb-cccc-dddd-eeee-ffffgggghhhh,十六進制)。 「以十進制數表示」不是正常的格式。 – zwol 2011-02-23 21:38:26
你有一個包含十進制表示的字符串嗎?這個是從哪裏來的?我會提出投訴! – 2011-02-23 21:43:15