FIT文件CRC校验
校验FIT文件CRC代码做个记录,分为两步先校验头部然后再校验整个FIT文件。校验头部不是必需的看个人需要吧。为了偷懒使用Okio库,还有计算CRC的时候用的Garmin的FitSDK。
public class FitUtils {
/**
* 校验Fit文件,首先校验头部然后校验数据
*
* @param file
* @return
*/
public static boolean checkFitFile(File file) {
BufferedSource source = null;
try {
final int MAX_HEADER_LEN = 14;
source = Okio.buffer(Okio.source(file));
byte[] header = new byte[MAX_HEADER_LEN - 2];
header[0] = source.readByte();
int headerLen = header[0];
if (headerLen <= 0 || headerLen > MAX_HEADER_LEN)
return false;
source.read(header, 1, header.length - 1); //去除头长度和crc
//验证头部
if (headerLen == MAX_HEADER_LEN) {
short fileCrc16 = source.readShortLe();
if (fileCrc16 != 0) { //FIT允许HEADER的CRC为0
int crc16 = getCRC16(header, 0, header.length);
if (crc16 != fileCrc16)
return false;
}
}
//校验数据
source.close();
source = Okio.buffer(Okio.source(file));
int crc16ForData = 0;
for (int crcByte = 0; crcByte < file.length() - 2; crcByte++) {
crc16ForData = CRC.get16(crc16ForData, source.readByte());
}
short originCRC16 = source.readShortLe();
return originCRC16 == (short) crc16ForData;
} catch (IOException e) {
if (BuildConfig.DEBUG)
e.printStackTrace();
} finally {
if (source != null) {
try {
source.close();
} catch (IOException e) {
if (BuildConfig.DEBUG)
e.printStackTrace();
}
}
}
return false;
}
public static short getCRC16(byte[] data, int offset, int len) {
int crc16 = 0;
for (int index = offset; index < (offset + len); index++) {
crc16 = CRC.get16(crc16, data[index]);
}
return (short) crc16;
}
}
《架构文摘》每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性 能、高稳定)、大数据、机器学习等各个热门领域。
FIT文件CRC校验的更多相关文章
- 文件CRC和MD5校验
文件CRC和MD5校验 CRC和MD5用于文件和数据的传输校验,以确认是否接收成功. unit CRCMD5; interface { 获取文件CRC校验码 } function GetFileCRC ...
- 获取文件CRC和MD5
unit untCRCMD5; interface { 获取文件CRC校验码 } function GetFileCRC(const iFileName: string): String; { 获取字 ...
- STM32大文件分块校验CRC
一.CRC校验的使用 STM32内置CRC计算单元,节约了软件计算的时间.在软件开发中,可以为firm追加4字节的CRC校验码到生成的BIN文件最后位置,这个CRC码就是全部代码区域数据的CRC ...
- 文档:网络通讯包结构(crc校验,加解密)
一直想把这个流程整理一下. 包结构: 包 对(datacrc+protoID+dataSize)组成的byte[] 进行crc计算而得到 对(数据内容)进行crc计算而得到 协议号 数据内容的字节长度 ...
- Verilog语言实现并行(循环冗余码)CRC校验
1 前言 (1) 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能, ...
- 协议栈中使用crc校验函数
CRC校验介绍:循环冗余校验码,原理是多项式除法 ZigBee协议栈:能够使zigbee节点相互之间组网,数据传输,数据获取,数据显示 思路以及步骤: 1.因为IAR的程序是用c写的,所以上网查找如何 ...
- [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码
1.CRC.FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检 ...
- CEIWEI CheckSum CRC校验精灵v2.1 CRC3/CRC4/CRC5/CRC6/CRC8CRC10/CRC11/CRC16/CRC24/CRC32/CRC40/CRC64/CRC82/Adler32
CEIWEI CheckSum CRC校验精灵 是一款通用的循环冗余校验码CRC(Cyclic Redundancy Check).MD5.SHA1.SHA2.SHA3.HAVAL.SHAKE.TIG ...
- 基于STM32的CRC校验说明
///***************************************************************************** //下面是test.c里面的函数 // ...
随机推荐
- Codeforces 1004D
题意略. 思路: 有两个点要注意一下: 1.这个菱形矩阵是8对称的,也即可以是沿45°对角线对称. 2.菱形矩阵上的数字表明了这个点到中心0点的距离,这对于确定位置有帮助. 这个题目简直刷新人生观,这 ...
- npm init,npm -y, npm install --save,npm install --save-dev
npm init 初始化一个简单的package.json文件,执行该命令后终端会依次询问 name, version, description 等字段 npm init --yes|-y 作用同上, ...
- Linux下手动安装JDK
一.删除自带的JDK 查询系统自带JDK rpm -qa | grep java rpm -qa | grep jdk 删除查询出来的文件名 rpm -e --nodeps 文件名 命令执行成功后重新 ...
- k近邻法的实现
k近邻法 模型 使用的模型实际上对应于特征空间的划分.模型的三个基本要素:1.距离度量 2. k值的选择 3. 分类决策规则决定. k值的选择:k值的选择,k如果选择的过小会导致过拟合,模型会变得复杂 ...
- UVA 11294 wedding 2-sat
可以把一对夫妇当成一个节点,然后拆点的话,h和w分别为真和假,然后直接按照题目中说的建图染色即可 #include <iostream> #include <cstdio> # ...
- Codeforces Round #481 (Div. 3) C. Letters
题目地址:http://codeforces.com/contest/978/problem/C 题解:有n个宿舍,每个宿舍人不一样多,有m封信,每封信送给对应的第m间房间,问这封信是给第几个宿舍,第 ...
- POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 27277 Accepted: ...
- codeforces 284 C. Cows and Sequence(线段树)
题目链接:http://codeforces.com/contest/284/problem/C 题意:就是给出3个操作 1)是将前i 个数加x 2)在数组最后添加一个数x 3)删除数组最后的那个数 ...
- 全栈开发博客系统(nodejs+vuejs+mongodb)
本篇文章将会介绍如何使用nodejs+vuejs构建个人博客. 主要分三部分内容: 环境准备 博客后端管理系统(admin) 后端服务(主要提供admin及web端接口) 博客前端展示(web) 环境 ...
- docker 搭建小型的node开发环境。
选择daocloud的镜像源----快.不多说 镜像的准备: docker pull docker.io/node 下载node镜像 docker pull daocloud.io/nginx 下载n ...