c++ reinterpret_cast,生成唯一的数字
C++ reinterpret_cast, making unique number
最近,我正在使用代码为我的类制作唯一的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
真的是唯一的对于所有的输入字符串吗?
不,不是。您正在转换字符串的地址,而不是其内容。
要基于字符串输入创建一个数值,使用散列函数。然而,由于所谓的鸽子洞原理,这并不能创建一个真正的唯一的数字。
看情况而定。以下是我对你问题的解释:
您正在尝试为每个字符串分配不同的数字。来自不同来源的相同字符串将具有不同的id。
案例1:
如果str
恰好是一个可重用的缓冲区,您可以使用它从任何地方读取这些字符串。它们都有相同的基址。所以不,它不会是唯一的
案例2:
str
恰好是一个堆分配的字符串。此外,所有将被标识的字符串都有重叠的生存期。那么,是的,这些id将是唯一的,因为它们同时驻留在内存中的不同地址。
如果您想要生成唯一的ID,但是您希望相同的字符串具有相同的ID,那么请查看Greg对哈希函数的回答。
它可能并不总是唯一的,
id1 = generate_unique_id_from_string("test12344444444444444");
id2 = generate_unique_id_from_string("Test12344444444444444");
另外,我认为这将取决于平台的端序。
相关文章:
- 按唯一标识符描述数字列表
- C++:创建1000次唯一的随机分布,在任何分布中都没有重复的数字
- 需要在C 中生成一个从00001到99999的唯一5位数字
- 生成跨系统唯一数字的算法
- 选择6个随机唯一数字
- 如何将目录路径转换为唯一的数字标识符 (Linux/C++)
- 标准容器/库,用于存储数字窗口并返回唯一数字的数量
- 在c++中随机生成n以内的唯一数字
- 连续获取 2 个唯一数字
- 测量数组中的唯一数字
- 在编译时生成唯一的数字
- 需要在数组中找到一个唯一的数字
- 如何使用std::find查找唯一的数字
- C++中的唯一数字
- 随机生成n个唯一的数字
- c++ reinterpret_cast,生成唯一的数字
- 进程间在0到255之间的唯一数字
- 从一组集合{{中选择一组数字{1,2,3}.},{.},{.}}使得所有元素都是唯一的
- 在数组中查找唯一的数字
- 通过类型标识符表示类的数字唯一标识符