0

我正在浏览我的应用程序核心代码,我发现了这个功能:

//======================================================
// 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 字符串不兼容。

但我几乎无法理解这一点!

有人可以帮我理解这背后的概念吗?可能是一个例子会有所帮助。

4

1 回答 1

0

我希望你知道什么是哈希函数。否则有一个维基

(一般来说,散列函数是一个函数,它从(大)数据域(通常可以说是任意长度的字节序列)返回较小域的元素(可以说是 32..256 位序列)( 32位你有一个unsigned

引用维基:

散列函数是任何算法或子程序,可将可变长度的大型数据集(称为键)映射到固定长度的较小数据集。例如,具有可变长度的人名可以散列为单个整数。散列函数返回的值称为散列值、散列码、散列和、校验和或简称为散列。

MBCS是一种用于编码中文、日文的旧编码......假设它是一个祖先,UTF8并且它以类似的方式工作(一些字符被编码为 1 个字节,一些字符被编码为 2 个字节,依此类推。

关于 MBCS 的评论是因为可能RWCString没有用于多字节字符串的排序规则表(告诉它如何使字符大写以及执行其他操作的表,例如排序......)。

可能是哈希函数,当调用时RWCString::ignoreCase

return mystring.toUpper().hash(RWCString::exact)

所以它将字符串转换为大写并计算哈希。没有排序规则表,它就无法发挥toUpper()作用。

于 2012-07-17T07:46:06.363 回答