计算文件CRC32数值
我们经常要计算文件的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数值相关推荐
- c语言修改elf文件crc32,hash/crc32
import "hash/crc32" 概述 索引 示例 概述 Package crc32 实现32位循环冗余校验或CRC-32校验和.有关信息,请参阅http://en.wiki ...
- 【转】Java计算文件的hash值
原文地址:http://blog.csdn.net/qq_25646191/article/details/78863110 如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件has ...
- Java计算文件的hash值
如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同. 比较常用的文件hash算法有MD5和SHA-1. 我用 ...
- windows/linux计算文件 MD5值
windows 计算文件 MD5值 cmd下输入: certutil -hashfile filename MD5 如: certutil -hashfile C:\1.txt MD5 //打印到屏幕 ...
- python计算文件md5值_用python 正确计算大文件md5 值
python 计算文件的md5值很方便,但如果只是简单的把文件都入到内存中,大文件会导致问题,一般采用切片的方式分段计算,下面的几个函数可以很好的解决这个问题. 使用 hashlib import h ...
- python怎么读取txt文件并统计其字数-python计算文件的行数和读取某一行内容的实现方法...
一.计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(o ...
- python读取文件某一行-python计算文件的行数和读取某一行内容的实现方法
一.计算文件的行数 最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了: count = len(o ...
- 简单的MapReduce项目,计算文件中单词出现的次数
简单的MapReduce项目,计算文件中单词出现的次数 计算文件中单词出现的次数,试题如下图 1.创建读取单词的文件tast,内容如下: hadoop core map reduce hiv hba ...
- sh256sum、xxd、base64联合计算文件的hash
计算文件hash值并进行base64编码 # 计算文件的sha256哈西值 $ sha256sum filename f3b6d97538bf435399529405f5b5e88a81911d043 ...
最新文章
- 如何让敏捷中的每日站会发挥最大效果?
- C#调用Mail发送QQ邮件
- jenkins自动化构建iOS应用配置过程中遇到的问题
- Nagios监控HP服务器的硬件状态
- AtomicInteger原子整形与ReentrantLock锁
- 微信APP支付 C#
- 【电商】电商后台设计—电商产品的用户体系
- Django视图模板_004
- imagej得到灰度图数据_IMAGE J灰度分析
- 带三维团队半年的一点总结和想法
- WPS怎么统计相同名称的数据_教你如何将垃圾的WPS,玩得高大上!
- 对抗生成网络学习(十一)——SAGAN生成更为精细的人脸图像(tensorflow实现)
- 【AI每日播报】三星发布AI助手 谷歌打造超速人工智能媲美人类
- oracle中diag,Oracle diag目录下面的大量trace trc文件
- 【UE4 第一人称射击游戏】13-瞄准开火
- 有什么推荐书目可以了解社会的残酷?
- 常见的电源问题(一)混叠效应
- 新买的阿里云服务器无法进行远程桌面
- randi( )函数--MATLAB
- 02.设置windows密码重设盘