最近,我正在使用代码为我的班级制作唯一的int
号码。
我使用了reinterpret_cast<int>(my_unique_name)
,其中my_unique_name
是具有唯一值的char []
变量。如下所示:
const char my_unique_name[] = "test1234";
int generate_unique_id_from_string(const char *str)
{
return reinterpret_cast<int>(str);
}
我的问题是,所有条目字符串生成的int
真的是唯一吗?
答案 0 :(得分:7)
不,不是。您正在投射字符串的地址,而不是其内容。
要根据字符串输入创建数值,请使用hash function。但是,由于所谓的pigeonhole principle,这不会创建真正的唯一号码。
答案 1 :(得分:3)
这取决于。以下是我对您的问题的解释:
您正在尝试为每个字符串分配不同的数字。来自不同来源的相同字符串将具有不同的ID。
案例1:
如果str
碰巧是一个可重复使用的缓冲区,您可以从任何地方读取这些字符串。然后他们都将拥有相同的基地址。所以不,不会独一无二。
案例2:
str
恰好是堆分配的字符串。此外,所有将被识别的字符串都有重叠的生命周期。然后是,ID将是唯一的,因为它们都在不同的地址同时驻留在内存中。
编辑:
如果要生成唯一ID,但希望相同的字符串具有相同的ID,请查看Greg对哈希函数的回答。
答案 2 :(得分:0)
它可能并不总是唯一的,
id1 = generate_unique_id_from_string("test12344444444444444");
id2 = generate_unique_id_from_string("Test12344444444444444");
另外,我认为这取决于平台的字节顺序。