1

最近,我正在使用代码int为我的班级制作唯一编号。

我使用reinterpret_cast<int>(my_unique_name)wheremy_unique_name是一个char []具有唯一值的变量。如下所示:

const char my_unique_name[] = "test1234";

int generate_unique_id_from_string(const char *str)
{
  return reinterpret_cast<int>(str);
}

我的问题是,生成的所有条目字符串int真的唯一吗?

4

3 回答 3

7

不它不是。您正在转换字符串的地址,而不是其内容。

要基于字符串输入创建数值,请使用散列函数。但是,由于所谓的鸽巢原理,这并不能创建一个真正唯一的数字。

于 2011-10-09T08:20:45.407 回答
3

这将取决于。这是我对你的问题的解释:

您正在尝试为每个字符串分配不同的数字。来自不同来源的相同字符串将具有不同的 ID。

情况1:

如果str碰巧是一个可重用的缓冲区,您可以使用它从任何地方读取这些字符串。然后它们都将具有相同的基地址。所以不,它不会是唯一的。

案例二:

str恰好是一个堆分配的字符串。此外,所有将被标识的字符串都有重叠的生命周期。那么是的,ID 将是唯一的,因为它们都同时驻留在内存中的不同地址。

编辑:

如果要生成唯一 ID,但希望相同的字符串具有相同的 ID,请查看 Greg 对哈希函数的回答。

于 2011-10-09T08:23:44.937 回答
0

它可能并不总是独一无二的,

id1 = generate_unique_id_from_string("test12344444444444444");
id2 = generate_unique_id_from_string("Test12344444444444444");

另外,我认为这将取决于平台的字节序。

于 2011-10-09T08:21:27.760 回答