现在的位置: 首页 > 综合 > 正文

FAT长文件名 校验和算法 例子分析

2013年07月05日 ⁄ 综合 ⁄ 共 749字 ⁄ 字号 评论关闭

 FAT长文件名 校验和算法 例子分析

#include <stdio.h>
#include <string.h>

unsigned char ChkSum (unsigned char *pFcbName)
{
short FcbNameLen;
unsigned char Sum; 
//必须为无符号型.

Sum = 0;
for (FcbNameLen=11; FcbNameLen!=0; FcbNameLen--) {
// NOTE: The operation is an unsigned char rotate right
Sum = ((Sum & 1) ? 0x80 : 0) + (Sum >> 1) + *pFcbName++;
}
return (Sum);
}

int main(int argc, const char *argv[])
{
    if(argc != 2)
    {
        return -1;
    }

    unsigned char shortname[12] = {0};
    shortname[11] = 0;
    strncpy((char*)shortname,argv[1],11);
    printf("argv[1] = %s\n",argv[1]);
    printf("shortname = %s\n",shortname);

    printf("ChkSum  = 0x%02x\n",ChkSum(shortname) );

    return 0;
}

 

[user:test] ./a.out "ABCDEF~42  " 
//42后面是两空格.我的文件全名是abcdefghijk3.2
argv[1] = ABCDEF~42 
shortname = ABCDEF~42 
ChkSum  = 0x2f

 

需要注意的是:FAT的文件名和其他参数一定都是无符号型的。

如果用有符号型,>>肯定会出错的了。

抱歉!评论已关闭.