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

 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的文件名和其他参数一定都是无符号型的。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值