C++ reinterpret_cast,制作唯一编号

发布于 2024-12-09 09:50:59 字数 422 浏览 0 评论 0原文

最近,我正在使用代码为我的类创建唯一的 int 数字。

我使用了reinterpret_cast(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 对于所有条目字符串来说真的是唯一吗?

Recently, i'm using a code to make unique int number for my classes.

I used reinterpret_cast<int>(my_unique_name) where my_unique_name is a char [] variable with unique value. Something like below:

const char my_unique_name[] = "test1234";

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

My question is, is the generated int really unique for all entry strings ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

喜爱纠缠 2024-12-16 09:50:59

不,事实并非如此。您正在转换字符串的地址,而不是其内容。

要根据字符串输入创建数值,请使用哈希函数 。然而,这并不能创建一个真正唯一的数字,因为所谓的鸽巢原理

No, it is not. You are casting the address of the string, not its contents.

To create a numeric value based on string input, use a hash function. However, this doesn't create a truly unique number, because of the so-called pigeonhole principle.

无声静候 2024-12-16 09:50:59

这要看情况。这是我对你的问题的解释:

你试图为每个字符串分配不同的数字。不同来源的相同字符串将具有不同的 ID。

情况 1:

如果 str 恰好是一个可重用的缓冲区,您可以使用它从任何地方读取这些字符串。那么它们都将具有相同的基地址。所以不,它不会是独一无二的。

情况 2:

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

编辑:

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

It would depend. Here's my interpretation of your question:

You're trying to assign a different number to each string. And identical strings from different sources will have different IDs.

Case 1:

If str happens to be a reusable buffer that you use to read in those strings from wherever. Then they'll all have the same base address. So no it will not be unique.

Case 2:

str happens to be a heap-allocated string. Furthermore, all the strings that will be ID'ed have overlapping lifetimes. Then yes, the IDs will be unique because they all reside in memory at the same time at different addresses.

EDIT:

If you want to generate a unique ID, but you want identical strings to have the same ID, then look at Greg's answer for a hash function.

我的影子我的梦 2024-12-16 09:50:59

它可能并不总是唯一的,

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

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

It may not be always unique,

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

Also, I think this will depend on the endianness of the platform.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文