Bar*_*lly 7 c++ delphi com winapi variant
旧版本的Visual Basic中使用的OLE变体,在COM自动化中普遍存在,可以存储许多不同的类型:基本类型,如整数和浮点数,更复杂的类型,如字符串和数组,以及一直到IDispatch实现和指针形式的ByRef变种.
变量也是弱类型的:它们将值转换为另一种类型,而不会发出警告,具体取决于您应用的运算符以及传递给运算符的值的当前类型.例如,比较两个变体,一个包含整数1,另一个包含字符串"1",为了相等将返回True.
因此,假设我正在使用基础数据级别的变体(例如,VARIANT在C++或TVarDataDelphi中 - 即不同可能值的大联合),我应该如何一致地散列变体以使它们遵守正确的规则?
规则:
如果我必须使用不同的排序和直接比较规则以使哈希适合,那就没关系.
我正在工作的方式是我将变量规范化为字符串(如果它们适合),并将它们视为字符串,否则我正在使用变量数据,就像它是一个不透明的blob,并散列和比较它原始字节.当然,这有一些局限性:数字1..10排序[1, 10, 2, ... 9]等等.这有点令人讨厌,但它是一致的,而且工作很少.但是,我想知道这个问题是否有一个公认的做法.
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |