我们经常要计算文件的CRC32值。

经常用的工具为:HashCalc

我们来编写一段程序来实现计算CRC32功能。

使用类:fstream

使用方法:

1. 打开文件

open(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out)

2. 定位文件(读)

seekg(streamoff off, ios_base::seekdir way)

3. 文件大小

tellg()

4. 清错误状态标记

clear()

5. 读文件

read(char* s, streamsize n)

6. 关闭文件

close()

本程序在CDT(cygwin gcc)调试通过。

// calFileCRC32.cpp : Defines the entry point for the console application.
//#include <iostream>
#include <fstream>using namespace std;unsigned int crc32table[256];void genCRC32table()
{int i;int j;unsigned int crc;for(i = 0; i < 256; i++) {crc = i;for(j = 0; j < 8; j++) {if((crc & 1) == 1)crc = (crc >> 1) ^ 0xEDB88320;elsecrc >>= 1;}crc32table[i] = crc;}
}unsigned int calCRC32Num(char* fileName)
{genCRC32table();fstream fileStream;fileStream.open(fileName, ios::in | ios::binary); // Input and BinaryfileStream.seekg(0L, ios::end);int fileSize = fileStream.tellg();char* buffer = new char[fileSize];int len = fileSize;fileStream.seekg(0, ios::beg);fileStream.clear();// =========================================================================unsigned int crc32 = 0xFFFFFFFF;while(!fileStream.eof()) // 是否文件末尾{if (!fileStream.fail()) { // 是否文件错fileStream.read(buffer, len);for(int i = 0; i < len; i++)crc32 = (crc32 >> 8) ^ crc32table[(crc32 ^ buffer[i]) & 0xFF];}fileStream.setstate(ios::eofbit); // 设置文件状态标记为eof}// =========================================================================fileStream.close();return crc32 ^ ~0U;
}int main(int argc, char* argv[])
{printf("File Name\tCRC32\n");/// printf("%ls\t", argv[1]); // 如果使用VS2005~VS2015创建的Console, 打开注释printf("%s\t", argv[1]);if (argc > 1) {// "d:\\D2172017.DAT"printf("%x", calCRC32Num(argv[1]));}return 0;
}

实现效果

(cdt+cygwin/mingw)

C/C++ Development Tools

Toolchain set How to setup gcc (MSYS2) for Eclipse in Windows for C++ development | DevDungeon

Window -> Preferences

新建C++工程

选择"Create a new C or C++ project"

选择"C++ Managed Build"

Cygwin

MinGW

工程名: calFileCRC32

Executable: Hello World C++ Project

Toolchains: Cygwin/MinGW GCC

点击"Finish"

初始代码

//============================================================================
// Name        : calFileCRC32.cpp
// Author      :
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================#include <iostream>
using namespace std;int main() {cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!return 0;
}

运行生成的exe

PS: 关于选择,小型程序可以使用msys2;在使用Msys2时,需要设置系统变量。

pacman -S mingw-w64-x86_64-gcc

Cygwin

需要如下dll(从C:\cygwin64\bin拷贝到exe所在文件夹):

  • cygwin1.dll
  • cyggcc_s-seh-1.dll
  • cygstdc++-6.dll

Msys2

需要如下dll(从C:\msys64\mingw64\bin拷贝到exe所在文件夹):

  • libgcc_s_seh-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll

参考文章

1. fstream:fstream - C++ Reference

2. crc32:http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/libkern/crc32.c

计算文件CRC32数值相关推荐

  1. c语言修改elf文件crc32,hash/crc32

    import "hash/crc32" 概述 索引 示例 概述 Package crc32 实现32位循环冗余校验或CRC-32校验和.有关信息,请参阅http://en.wiki ...

  2. 【转】Java计算文件的hash值

    原文地址:http://blog.csdn.net/qq_25646191/article/details/78863110 如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件has ...

  3. Java计算文件的hash值

    如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同. 比较常用的文件hash算法有MD5和SHA-1. 我用 ...

  4. windows/linux计算文件 MD5值

    windows 计算文件 MD5值 cmd下输入: certutil -hashfile filename MD5 如: certutil -hashfile C:\1.txt MD5 //打印到屏幕 ...

  5. python计算文件md5值_用python 正确计算大文件md5 值

    python 计算文件的md5值很方便,但如果只是简单的把文件都入到内存中,大文件会导致问题,一般采用切片的方式分段计算,下面的几个函数可以很好的解决这个问题. 使用 hashlib import h ...

  6. python怎么读取txt文件并统计其字数-python计算文件的行数和读取某一行内容的实现方法...

    一.计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(o ...

  7. python读取文件某一行-python计算文件的行数和读取某一行内容的实现方法

    一.计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(o ...

  8. 简单的MapReduce项目,计算文件中单词出现的次数

    简单的MapReduce项目,计算文件中单词出现的次数 计算文件中单词出现的次数,试题如下图 1.创建读取单词的文件tast,内容如下: hadoop core map reduce hiv hba ...

  9. sh256sum、xxd、base64联合计算文件的hash

    计算文件hash值并进行base64编码 # 计算文件的sha256哈西值 $ sha256sum filename f3b6d97538bf435399529405f5b5e88a81911d043 ...

最新文章

  1. 如何让敏捷中的每日站会发挥最大效果?
  2. C#调用Mail发送QQ邮件
  3. jenkins自动化构建iOS应用配置过程中遇到的问题
  4. Nagios监控HP服务器的硬件状态
  5. AtomicInteger原子整形与ReentrantLock锁
  6. 微信APP支付 C#
  7. 【电商】电商后台设计—电商产品的用户体系
  8. Django视图模板_004
  9. imagej得到灰度图数据_IMAGE J灰度分析
  10. 带三维团队半年的一点总结和想法
  11. WPS怎么统计相同名称的数据_教你如何将垃圾的WPS,玩得高大上!
  12. 对抗生成网络学习(十一)——SAGAN生成更为精细的人脸图像(tensorflow实现)
  13. 【AI每日播报】三星发布AI助手 谷歌打造超速人工智能媲美人类
  14. oracle中diag,Oracle diag目录下面的大量trace trc文件
  15. 【UE4 第一人称射击游戏】13-瞄准开火
  16. 有什么推荐书目可以了解社会的残酷?
  17. 常见的电源问题(一)混叠效应
  18. 新买的阿里云服务器无法进行远程桌面
  19. randi( )函数--MATLAB
  20. 02.设置windows密码重设盘

热门文章

  1. 华为、小米、智汀等智能家居的前景、现状和未来发展的遐想
  2. 花生壳工具使用无法映射本地站点问题
  3. 机器学习笔记:常用数据集之scikit-learn内置玩具数据集
  4. 红帽学习环境下的ansible yum源配置
  5. 苹果手机桌面计算机没6,iPhone6连接电脑没有反应的六个原因分析
  6. 如何找到一个正规的level2行情接口?
  7. CSS Hack的概念
  8. 【Linux防火墙】网络ip和端口管理
  9. CTFHUB学习题解Web(1)- 前置技能(持续更新整理)
  10. C++模板-32-普通函数和模板函数调用规则