这是我的 C++ 函数,它使用一种按位:
int genkey(const unsigned char a,const char b,const char c )
{
int val=0;
unsigned char *p= reinterpret_cast <unsigned char *>(&val);
p[0]=a;
char *q= reinterpret_cast <char *>(&val);
q[1]=b;
q[2]=c;
return val;
}
我用它来生成键(对象的唯一值)。
可以传递给函数的值的范围是:对于a参数=> [0..255],对于b参数=> [0..127]和对于c参数=> [0.. 127].
假设该函数只能使用相同的三个参数值调用一次。例如,只有一次调用的值为 (10, 0, 0)。
函数是否返回重复值?
谢谢。
最佳答案
您的函数可能会为每组唯一的输入值返回唯一的值(假设您的 int
至少为 24 位宽)。然而,更好的写法可能是:
int genkey(const unsigned char a,const char b,const char c )
{
return a
| (static_cast<unsigned char>(b) << 8)
| (static_cast<unsigned char>(c) << 16);
}
这将三个 8 位值组合成一个 24 位值,而无需使用难以读取的指针操作。
请注意,我已注意将 char
值(可能是 signed char
,具体取决于您的编译器设置)转换为 unsigned char
在移动它们之前。原因是移位会先将值提升为有符号的int
,这可能涉及到符号扩展。你不会想要的。
关于使用一种按位 : I'll get duplicated values? 的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4148052/