我有一个特定的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"));
答案 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