项目名称:addCRC
一、项目概述
addCRC项目旨在为文件提供强大的数据完整性校验功能。该项目通过添加CRC校验码到文件的不同位置,
确保文件在传输或存储过程中不被篡改或损坏。用户可以指定每固定数量的字节生成一个校验码,
当这个数量为0xffffffff时,会在文件末尾添加校验码。此外,项目支持灵活选择CRC算法,如crc_8、crc_16_IBM、crc_16_MODBUS、crc_32等,以满足不同场景的需求。
二、项目特点
-
灵活的校验码生成:用户可以指定每固定数量的字节生成一个CRC校验码,这有助于在文件的不同位置进行校验,提高数据完整性检测的准确性。
-
多种CRC算法支持:项目提供了多种常见的CRC算法,用户可以根据实际需要选择适合的算法进行校验码的计算。
-
端序模式选择:通过定义宏
TARGET_PLATFORM_LITTLE_ENDIAN
,用户可以选择校验码以小端模式或大端模式存储,以适应不同平台的需要。 -
纯C语言实现:项目使用纯C语言编写,具有良好的跨平台性和可移植性,可以复用在单片机代码中。
三、功能实现
-
文件读取与解析:项目能够读取指定文件,并根据用户设定的字节间隔,将文件内容划分为多个块。
-
CRC校验码计算:针对每个文件块,项目使用选定的CRC算法计算校验码。计算过程中考虑了端序模式的选择,确保生成的校验码与目标平台的端序模式一致。
-
校验码插入:计算得到的校验码会被插入到文件的指定位置。例如被指定256时,代表每读取256个字节写入一个CRC校验码。当设定的字节间隔为
0xffffffff
时,校验码会被添加到文件的末尾。 -
文件保存:完成校验码插入后,项目将修改后的文件保存到指定位置,保存为新文件。
四、应用场景
addCRC项目适用于需要确保文件数据完整性的各种场景,如嵌入式系统、网络通信、数据存储等。通过为文件添加CRC校验码,项目可以提高数据传输的可靠性,并在数据损坏或篡改时及时发现并处理。
五、注意事项
-
在使用项目时,请确保所选CRC算法与接收端一致,以保证校验的正确性。
-
当将项目复用到单片机代码时,请确保单片机的内存和计算能力满足项目的需求。
-
在实际使用中,建议根据具体需求对项目进行必要的测试和优化,以确保其稳定性和性能。
六、项目结构
add-crc
|-- CMakeLists.txt 项目文件
|-- LICENSE 许可证
|-- README.en.md 英文readme
|-- README.md 中文readme
|-- app 应用
|-- bin 编译项目产生的.exe在这个文件夹
|-- binAddCrcConfig.h.in 配置文件,用于产生版本号
|-- build 构建项目产生的文件都在这
`-- component CRC组件
七、安装教程
(先决条件:gcc、cmake
)
- 请确保所选CRC算法与接收端一致,默认的CRC算法为crc_16_MODBUS,如需更改算法,请修改main.c大约位于104行的
crcCheck(&crc_16_MODBUS, read_buf,read_return,&crc_value,sizeof(crc_16_MODBUS));
函数,
函数的第一个参数以及第五个参数须保持一致。 - 删除
build
文件夹下的所有文件 - 在
build
文件夹下打开终端,选择构建项目类型。因为我的编译套件为MinGW
,因此在终端中输入命令cmake -G"MinGW Makefiles" ..
可用的构建类型有以下几种:
* Visual Studio 17 2022 = Generates Visual Studio 2022 project files.
Use -A option to specify architecture.
Visual Studio 16 2019 = Generates Visual Studio 2019 project files.
Use -A option to specify architecture.
Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
Optional [arch] can be "Win64" or "ARM".
Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
Optional [arch] can be "Win64" or "ARM".
Visual Studio 12 2013 [arch] = Deprecated. Generates Visual Studio 2013
project files. Optional [arch] can be
"Win64" or "ARM".
Visual Studio 9 2008 [arch] = Deprecated. Generates Visual Studio 2008
project files. Optional [arch] can be
"Win64" or "IA64".
Borland Makefiles = Generates Borland makefiles.
NMake Makefiles = Generates NMake makefiles.
NMake Makefiles JOM = Generates JOM makefiles.
MSYS Makefiles = Generates MSYS makefiles.
MinGW Makefiles = Generates a make file for use with
mingw32-make.
Green Hills MULTI = Generates Green Hills MULTI files
(experimental, work-in-progress).
Unix Makefiles = Generates standard UNIX makefiles.
Ninja = Generates build.ninja files.
Ninja Multi-Config = Generates build-<Config>.ninja files.
Watcom WMake = Generates Watcom WMake makefiles.
CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files
(deprecated).
CodeBlocks - NMake Makefiles = Generates CodeBlocks project files
(deprecated).
CodeBlocks - NMake Makefiles JOM
= Generates CodeBlocks project files
(deprecated).
CodeBlocks - Ninja = Generates CodeBlocks project files
(deprecated).
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files
(deprecated).
CodeLite - MinGW Makefiles = Generates CodeLite project files
(deprecated).
CodeLite - NMake Makefiles = Generates CodeLite project files
(deprecated).
CodeLite - Ninja = Generates CodeLite project files
(deprecated).
CodeLite - Unix Makefiles = Generates CodeLite project files
(deprecated).
Eclipse CDT4 - NMake Makefiles
= Generates Eclipse CDT 4.0 project files
(deprecated).
Eclipse CDT4 - MinGW Makefiles
= Generates Eclipse CDT 4.0 project files
(deprecated).
Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files
(deprecated).
Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files
(deprecated).
Kate - MinGW Makefiles = Generates Kate project files (deprecated).
Kate - NMake Makefiles = Generates Kate project files (deprecated).
Kate - Ninja = Generates Kate project files (deprecated).
Kate - Ninja Multi-Config = Generates Kate project files (deprecated).
Kate - Unix Makefiles = Generates Kate project files (deprecated).
Sublime Text 2 - MinGW Makefiles
= Generates Sublime Text 2 project files
(deprecated).
Sublime Text 2 - NMake Makefiles
= Generates Sublime Text 2 project files
(deprecated).
Sublime Text 2 - Ninja = Generates Sublime Text 2 project files
(deprecated).
Sublime Text 2 - Unix Makefiles
= Generates Sublime Text 2 project files
(deprecated).
- 编译项目,在终端中输入
make
,执行结果如下:
[ 25%] Building C object component/crc/CMakeFiles/CRC.dir/CRC.c.obj
[ 50%] Linking C static library ..\..\lib\libCRC.a
[ 50%] Built target CRC
[ 75%] Building C object app/CMakeFiles/addCRC.dir/main.c.obj
[100%] Linking C executable D:\Users\admin\Desktop\add-crc\bin\addCRC.exe
[100%] Built target addCRC
产生的addCRC.exe保存在bin文件夹下
八、使用方法
./addCRC.exe 输入文件 输出文件 每固定数量字节写入一个CRC
实例:
- 输入a.bin 输出aout.bin 每读取256字节写入一个CRC
./addCRC.exe a.bin aout.bin 256
计算结果:
version:0.1.0 Release
addr:0000000000 ~ 0x000000ff CRC:0xedff
addr:0x00000102 ~ 0x00000201 CRC:0xb4c8
addr:0x00000204 ~ 0x00000303 CRC:0x4333
addr:0x00000306 ~ 0x00000405 CRC:0x3f45
addr:0x00000408 ~ 0x00000507 CRC:0x6e69
addr:0x0000050a ~ 0x00000609 CRC:0x0b82
addr:0x0000060c ~ 0x0000070b CRC:0x93eb
addr:0x0000070e ~ 0x0000080d CRC:0x0445
addr:0x00000810 ~ 0x0000090f CRC:0x4fa7
addr:0x00000912 ~ 0x00000a11 CRC:0x2eb2
addr:0x00000a14 ~ 0x00000b13 CRC:0x7090
addr:0x00000b16 ~ 0x00000c15 CRC:0x20c3
addr:0x00000c18 ~ 0x00000d17 CRC:0x4c55
addr:0x00000d1a ~ 0x00000e19 CRC:0xb99d
addr:0x00000e1c ~ 0x00000f1b CRC:0xeaa3
addr:0x00000f1e ~ 0x0000101d CRC:0x4f6d
addr:0x00001020 ~ 0x0000111f CRC:0x5cc8
addr:0x00001122 ~ 0x00001221 CRC:0x26ff
addr:0x00001224 ~ 0x00001323 CRC:0x6886
addr:0x00001326 ~ 0x00001425 CRC:0x25ed
addr:0x00001428 ~ 0x00001527 CRC:0xd0bc
addr:0x0000152a ~ 0x00001629 CRC:0xc516
addr:0x0000162c ~ 0x0000172b CRC:0xee0c
addr:0x0000172e ~ 0x0000182d CRC:0x15b0
addr:0x00001830 ~ 0x0000192f CRC:0xd195
addr:0x00001932 ~ 0x00001a31 CRC:0xe7aa
addr:0x00001a34 ~ 0x00001b33 CRC:0x3d17
addr:0x00001b36 ~ 0x00001c35 CRC:0x5461
addr:0x00001c38 ~ 0x00001d37 CRC:0x9a93
addr:0x00001d3a ~ 0x00001e39 CRC:0x4ca6
addr:0x00001e3c ~ 0x00001f3b CRC:0xe2f3
addr:0x00001f3e ~ 0x0000203d CRC:0xb71e
addr:0x00002040 ~ 0x0000213f CRC:0x90da
addr:0x00002142 ~ 0x00002241 CRC:0xd603
addr:0x00002244 ~ 0x00002343 CRC:0x254c
addr:0x00002346 ~ 0x00002445 CRC:0xafe8
addr:0x00002448 ~ 0x00002547 CRC:0x427b
addr:0x0000254a ~ 0x00002649 CRC:0x1ea5
addr:0x0000264c ~ 0x0000274b CRC:0x60f8
addr:0x0000274e ~ 0x0000284d CRC:0x5057
addr:0x00002850 ~ 0x0000294f CRC:0xf135
addr:0x00002952 ~ 0x00002a51 CRC:0xc7a4
addr:0x00002a54 ~ 0x00002b53 CRC:0x9b53
addr:0x00002b56 ~ 0x00002c55 CRC:0x9d11
addr:0x00002c58 ~ 0x00002d57 CRC:0xc432
addr:0x00002d5a ~ 0x00002e59 CRC:0xc4d6
addr:0x00002e5c ~ 0x00002f5b CRC:0xef52
addr:0x00002f5e ~ 0x0000305d CRC:0x37b4
addr:0x00003060 ~ 0x0000315f CRC:0x2e72
addr:0x00003162 ~ 0x00003261 CRC:0xfebd
addr:0x00003264 ~ 0x00003363 CRC:0x8fcb
addr:0x00003366 ~ 0x00003465 CRC:0x1ca0
addr:0x00003468 ~ 0x00003567 CRC:0x3691
addr:0x0000356a ~ 0x00003669 CRC:0xa513
addr:0x0000366c ~ 0x0000376b CRC:0xc24a
addr:0x0000376e ~ 0x0000386d CRC:0x6166
addr:0x00003870 ~ 0x0000396f CRC:0xd22b
addr:0x00003972 ~ 0x00003a71 CRC:0x04b6
addr:0x00003a74 ~ 0x00003b73 CRC:0xc9e5
addr:0x00003b76 ~ 0x00003c75 CRC:0xf391
addr:0x00003c78 ~ 0x00003d77 CRC:0x2ebd
addr:0x00003d7a ~ 0x00003e79 CRC:0x0481
addr:0x00003e7c ~ 0x00003f7b CRC:0x1334
addr:0x00003f7e ~ 0x0000407d CRC:0x128f
addr:0x00004080 ~ 0x0000417f CRC:0xbf25
addr:0x00004182 ~ 0x00004281 CRC:0x870f
addr:0x00004284 ~ 0x00004383 CRC:0x53d1
addr:0x00004386 ~ 0x00004485 CRC:0x09bb
addr:0x00004488 ~ 0x00004587 CRC:0x9787
addr:0x0000458a ~ 0x00004689 CRC:0x7296
addr:0x0000468c ~ 0x0000478b CRC:0xd2c3
addr:0x0000478e ~ 0x0000488d CRC:0x090f
addr:0x00004890 ~ 0x0000498f CRC:0x6415
addr:0x00004992 ~ 0x000049c5 CRC:0xf1a1
add crc ok
- 输入a.bin 输出b.bin 为整个文件添加一个CRC校验码,添加位置为文件尾
./addCRC.exe a.bin b.bin 0xffffffff
计算结果:
version:0.1.0 Release
addr:0000000000 ~ 0x00004933 CRC:0xf70f
add crc ok