谁知道这个是怎么计算出来的?
ExFAT文件系统中,用户目录项的属性2中有个 文件名HASH值(用于查找时快速比较文件名的),有谁知道这个是怎么计算出来的,请告诉我计算公式? WORD CalcFileNameHash (LPCWSTR filename)(
WORD chk = 0;
int len, i;
len = lstrlenW (filename);
for (i = 0; i <len; i + +) (
WCHAR c = (WCHAR) CharUpperW ((LPWSTR) filename );
chk = (WORD) (((chk <<15) | (chk>> 1)) + LOBYTE (c));
chk = (WORD) (((chk <<15) | (chk>> 1)) + HIBYTE (c));
)
return chk;
) 回复 2# 330wang
嗯,这个我也在论坛里面找到了,关键是其中的函数lstrlenW和CharUpperW是什么意思?怎么实现的?
抱歉,我对Windows编程一点都不了解。 只有我自己回答自己了,这几天对照日文原始文档,加上测试研究,总算明白了实现原理:
WORD CalcFileNameHash (LPCWSTR filename)
(
WORD chk = 0;
int len, i;
len = lstrlenW (filename);
for (i = 0; i <len; i + +) (
WCHAR c = (WCHAR) CharUpperW ((LPWSTR) filename );
chk = (WORD) (((chk <<15) | (chk>> 1)) + LOBYTE (c));
chk = (WORD) (((chk <<15) | (chk>> 1)) + HIBYTE (c));
)
return chk;
)
lstrlenW 函数返回的是宽字节字符串的字符个数。可以自己写一个,很简单。
CharUpperW函数是将宽字节字符串中能转换为大写字符的转换为大写输出,否则原样输出。具体实现可以参考日文文档中给出的范围规范映射一下即可。
哎,我发现现在到处转抄的太多了,真正涉及到技术细节的帖子太难找到。 对我来说像是天书啊 对我来说像是天书啊 对我来说像是天书啊
看来,要成为高手,还要学习一门外语和一门计算机语言! 是,全是一堆蜘蛛在爬 看不懂..... 给出代码,自己调试一下就明白啦。
页:
[1]
2