获取文件CRC和MD5

  1. unit untCRCMD5;  
  2.   
  3. interface  
  4.   
  5. { 获取文件CRC校验码 }  
  6. function GetFileCRC(const iFileName: string): String;  
  7. { 获取字符串CRC校验码 }  
  8. function GetStringCRC(const Str: string): Cardinal;  
  9. { 取文件MD5码 }  
  10. function GetFileMD5(const iFileName: string): String;  
  11.   
  12. implementation  
  13.   
  14. uses Classes, IdHashMessageDigest, IdHashCRC;  
  15.   
  16. { 获取文件CRC校验码 }  
  17. function GetFileCRC(const iFileName: string): String;  
  18. var  
  19.   MemSteam: TMemoryStream;  
  20.   MyCRC   : TIdHashCRC32;  
  21. begin  
  22.   MemSteam := TMemoryStream.Create;  
  23.   MemSteam.LoadFromFile(iFileName);  
  24.   MyCRC  := TIdHashCRC32.Create;  
  25.   Result := MyCRC.HashStreamAsHex(MemSteam);  
  26.   MyCRC.Free;  
  27.   MemSteam.Free;  
  28. end;  
  29.   
  30. { 获取字符串CRC校验码 }  
  31. function GetStringCRC(const Str: string): Cardinal;  
  32. var  
  33.   MyCRC: TIdHashCRC32;  
  34. begin  
  35.   MyCRC  := TIdHashCRC32.Create;  
  36.   Result := MyCRC.HashValue(Str);  
  37.   MyCRC.Free;  
  38. end;  
  39.   
  40. { 取文件MD5码 }  
  41. function GetFileMD5(const iFileName: string): String;  
  42. var  
  43.   MemSteam: TMemoryStream;  
  44.   MyMD5   : TIdHashMessageDigest5;  
  45. begin  
  46.   MemSteam := TMemoryStream.Create;  
  47.   MemSteam.LoadFromFile(iFileName);  
  48.   MyMD5  := TIdHashMessageDigest5.Create;  
  49.   Result := MyMD5.HashStreamAsHex(MemSteam);  
  50.   MyMD5.Free;  
  51.   MemSteam.Free;  
  52. end;  
  53.   
  54. end.  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux下,可以使用fseek函数来获取文件CRC32值。 CRC32是一种循环冗余校验码,用于检验数据传输的准确性。在Linux中,可以使用zlib库来计算CRC32值。zlib库中提供了一个名为crc32_combine()的函数,可以在文件中对多个数据进行CRC32校验的累积运算。 首先,需要包含zlib库的头文件和使用zlib库时需要链接的库文件。可以使用如下的命令安装zlib库: ``` sudo apt-get install zlib1g-dev ``` 接下来,编写一个计算文件CRC32值的函数。函数的实现如下: ```c #include <stdio.h> #include <zlib.h> unsigned long crc32_file(const char *filename) { unsigned long crc = crc32(0L, Z_NULL, 0); FILE *file = fopen(filename, "rb"); if (!file) { printf("Failed to open file.\n"); return 0; } unsigned char buf[BUFSIZ]; size_t n; while ((n = fread(buf, 1, sizeof(buf), file)) > 0) { crc = crc32(crc, buf, n); } if (fclose(file) != 0) { printf("Failed to close file.\n"); } return crc; } int main() { const char *filename = "example.txt"; unsigned long crc = crc32_file(filename); printf("CRC32 value of file %s is 0x%lx.\n", filename, crc); return 0; } ``` 在这个例子中,crc32_file函数通过fopen打开指定文件,然后采用分块读取的方式,每次读取BUFSIZ字节数的数据,并调用crc32_combine函数来累积计算CRC32值。最后,打印出计算得到的CRC32值。 需要注意的是,以上的代码只提供了计算指定文件CRC32值的功能,还可以根据实际需求进行改进。另外,需要根据实际情况进行错误处理,例如文件打开失败或关闭失败时的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值