将Javascript UUID函数转换为C

时间:2018-08-30 12:44:07

标签: javascript c

我有一个特定的JavaScript UUID创建公式,需要将其转换为C。现有的C库似乎需要很多crypto lib依赖项,而这些依赖项对于重新创建此简单公式而言实在太大了。

JavaScript:

   function generate(prefix)
   {
    return (prefix + 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx')
        .replace(/[xy]/g, function (c) {
    
          var r = Math.random() * 16 | 0;
          var v = (c === 'x') ? r : (r & 0x3 | 0x8);
    
          return v.toString(16);
        });
    }
    console.log(generate("Hello"));

1 个答案:

答案 0 :(得分:3)

该函数产生一个随机的十六进制数字。

这会(严重)在C语言中产生一个:

char hex_digit(char c)
{
    char* hexes = "0123456789abcdef";
    int r = rand() % 16;
    int v = c == 'x' ? r : (r & 0x3 | 0x8);
    return hexes[v];
}

然后用随机十六进制数字替换字符串中的'x''y'

void hexify(char* str)
{
    while (*str)
    {
        if (*str == 'x' || *str == 'y')
            *str = hex_digit(*str);
        str++;
    }
}

测试:

int main()
{
    char input[] = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
    hexify(input);
    printf("%s\n", input);
    return 0;
}

结果:

df694488-87ff-4b1c-9a69-c57444f58497