| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1012 人关注过本帖
标题:长文件名累加和的计算程序,请高手指点“ ((Sum & 1) ? 0x80 : 0) ”是什 ...
只看楼主 加入收藏
shsjn
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-6-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
长文件名累加和的计算程序,请高手指点“ ((Sum & 1) ? 0x80 : 0) ”是什么?
然后,文件系统会在目录建立时计算出一个8-bit 的校验和,这个校验和由短目录项文件名中 11 个
字符计算得出,然后保存在每一个长目录项中,如果保存在长目录项中的校验和与计算结果不同,这个目
录项便会被认为是孤立的,如果早期版本的MS-DOS/Windows 挂上(mount)了含有长目录项的磁盘,那么在
改文件名时只有短目录名会被改变,这样便会出现长目录项中的校验和与计算结果不符的现象。
校验和的算法如下,用C 语言描述:
//-----------------------------------------------------------------------------
// ChkSum ()
// 返回一个字节长度的无符号校验和,此校验和由一无符号字节数组计算得出,此数组长度必须为
// 11,同时假设数组包含的是MS-DOS 格式的文件名
// Passed: pFcbName 指向长度为11 的无符号字节数组指针,
// Returns: Sum 由pFcbName 数组计算得出的8-bit 无符号校验和
//------------------------------------------------------------------------------
unsigned char ChkSum (unsigned char *pFcbName)
{
short FcbNameLen;
unsigned char Sum;
Sum = 0;
for (FcbNameLen=11; FcbNameLen!=0; FcbNameLen--) {
// NOTE: 运算为无符号字符循环由移
Sum = ((Sum & 1) ? 0x80 : 0) + (Sum >> 1) + *pFcbName++;
}
return (Sum);
}
最后我们得出这样的结论:短目录项的结构包含最后访问日期,创建日期,第一个簇的簇号和文件.
大小,当然,还包括早期的MS-DOS/Windows 可以识别的短目录名。长目录项不再重复这些可以从短目录项
取得的信息,因而有更多的空间去容纳其他信息,这些空间主要作用于存储长目录名。与长目录项配对的
短目录项所包含的文件名我们也称作“别名”(alias, alias name)。
搜索更多相关主题的帖子: 目录 Windows 
2012-06-25 15:57
shsjn
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-6-25
收藏
得分:0 
查到资料了。原来是三元条件。意即:sum的最低位为1时取值0x80,否则取值0。
2012-06-25 16:28
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:20 
C里面就这一个三目运算符 也可以说是C里面最古怪的一种表述方法了 你不能不知道啊
2012-06-25 21:19
shsjn
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-6-25
收藏
得分:0 
谢谢版主。我是新手,以后多向你学习,多向大家学习。
2012-06-26 09:56
快速回复:长文件名累加和的计算程序,请高手指点“ ((Sum & 1) ? 0x80 : 0) ” ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015611 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved