我正在浏览我的应用程序核心代码,我发现了这个功能:
//======================================================
// Hash functions needed for the different Dictionaries
//------------------------------------------------------
static unsigned hashStr (const RWCString& str)
{
return (str.hash () );
}
当我用谷歌搜索它时,我发现了以下内容:
unsigned
hash(caseCompare = RWCString::exact) const;
返回合适的哈希值。如果caseCompare是RWCString :: ignoreCase,那么此函数将与MBCS字符串不兼容。
但我很难理解这一点!
可以请任何人帮助我理解这背后的概念吗? 可能是一个例子会有所帮助。答案 0 :(得分:0)
我希望你知道哈希函数是什么。否则就有wiki。
(一般来说,散列函数是一个函数,来自(大)数据域(通常说是任意长度的字节序列)返回一个较小域的元素(比如32..256的序列)位)(32位,你有一个unsigned
)
引用维基:
散列函数是将可变长度的大数据集(称为密钥)映射到固定长度的较小数据集的任何算法或子例程。例如,具有可变长度的人名可以被散列为单个整数。哈希函数返回的值称为哈希值,哈希码,哈希值,校验和或简单哈希值。
MBCS
是用于编码中文,日文的旧编码...假设它是UTF8
的祖先,它以类似的方式工作(某些字符编码为1个字节,某些字符编入2个字节,依此类推。
关于MBCS的评论是因为可能RWCString
没有多字节字符串的校对表(告诉它如何使字符变为大写的表,以及进行其他操作,如排序......)。
使用RWCString::ignoreCase
调用哈希函数时可能会执行:
return mystring.toUpper().hash(RWCString::exact)
所以它将字符串转换为大写并计算哈希值。如果没有排序规则表,则无法执行toUpper()
部分。