#define CHARACTER 11
char *szBuf;
szBuf = (char *)malloc(CHARACTER);
memcpy(szBuf,dir,CHARACTER);
if (NULL == szBuf)
{
return 0;
}
int i;
int ret=0;
for (i=11; i>0; i--)
ret = ((ret & 1) ? 0x80 : 0) + (ret >> 1) + *szBuf++;以上是通过短文件名计算长文件名的公式,可是结果始终不正确,是否是算法有错误?请指教
char *szBuf;
szBuf = (char *)malloc(CHARACTER);
memcpy(szBuf,dir,CHARACTER);
if (NULL == szBuf)
{
return 0;
}
int i;
int ret=0;
for (i=11; i>0; i--)
ret = ((ret & 1) ? 0x80 : 0) + (ret >> 1) + *szBuf++;以上是通过短文件名计算长文件名的公式,可是结果始终不正确,是否是算法有错误?请指教
{
ret = ((ret & 1) ? 0x80 : 0) + (ret >> 1) + (*szBuf); //地址加,非内容加
szBuf++;
}
for (i=11,j = 0; i>0; i--)
{
ret = ((ret & 1) ? 0x80 : 0) + (ret >> 1) + szBuf[j++];
}
短文件名确认是正确的,就不是知道为什么不正确。能否用WINHEX抓个图,标示一下呢?
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,当然会不对了