打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VC 实现获取文件的CRC32值
获取文件CRC32值VC 实现。。。。。

首先在头文件里面申明一下: unsignedlongCrc32Table[256];

代码开始:

voidCGetCrcDlg::OnGetFileCrc()//打开文件然后在EDIT控件里面直接显示文件校验值;
{
HANDLEhFile={NULL};
DWORDdwSize,bytes_read;
CStringFileNameStr;

MakeTable();//生成码表

//打开对话框
CFileDialogdlg(TRUE,NULL,"",OFN_HIDEREADONLY,
"AllFiles(*.*)|*.*||",this);
if(IDOK!=dlg.DoModal())
return;

FileNameStr=dlg.GetPathName();

hFile=CreateFile(FileNameStr,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,NULL);
dwSize=GetFileSize(hFile,NULL);

CStringcsData('',dwSize);
ReadFile(hFile,csData.GetBuffer(dwSize),dwSize,&bytes_read,NULL);
CloseHandle(hFile);
csData.ReleaseBuffer();

intnCRC=Get_CRC(csData,dwSize);
charch[20];
itoa(nCRC,ch,16);
m_FileCrcValue=ch;
m_FileCrcValue.MakeUpper();
UpdateData(FALSE);
}

voidCGetCrcDlg::MakeTable()//动态生成CRC32的码表
{
inti,j;
unsignedlongcrc;
for(i=0;i<256;i )
{
crc=i;
for(j=0;j<8;j )
{
if(crc&1)
crc=(crc>>1)^0xEDB88320;
else
crc>>=1;
}
Crc32Table[i]=crc;
}
}

intCGetCrcDlg::Get_CRC(CString&csData,DWORDdwSize)//获取crc32值
{
ULONG crc(0xffffffff);
intlen;
unsignedchar*buffer;
len=dwSize;
buffer=(unsignedchar*)(LPCTSTR)csData;
while(len--)
crc=(crc>>8)^Crc32Table[(crc&0xFF)^*buffer ];
returncrc^0xffffffff;
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VC下检查文件是否打开
通过代码实现EXE文件图标的替换
【原创&交流】PE文件格式的一些研究 - VC/MFC / 基础类
文件操作:CreateFile和WriteFile的学习
在 VS2008 下用 CRC32 算法实现程序自校验
VC知识库文章 - 在VC项目中使用自定义资源
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服