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里面的函数 // ...
随机推荐
- CocosBuilder 学习笔记(3) AnimationManager 与 ccbi 文件解析
[CocosBuilder]学习笔记目录 1. 相关的类 先介绍和AnimationManager相关的几个类: CCBSequence 时间线.有成员duration(时间线时间,默认10秒).na ...
- 懒人必备:.NetCore快速搭建ELK分布式日志中心
该篇内容由个人博客点击跳转同步更新!转载请注明出处! 前言 ELK是什么 它是一个分布式日志解决方案,是Logstash.Elastaicsearch.Kibana的缩写,可用于从不同的服务中收集日志 ...
- docker运行原理与使用总结
docker运行原理概述 Client-Server架构 docker守护进程运行在宿主机上systemctl start docker daemon进程通过socket从客户端(docker命令)接 ...
- Java NIO 下
内存映射文件 JAVA处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的IO类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. ...
- HDU3068 最长回文 Manacher's Algorithm 马拉车算法 模板
HDU3068 复习了一下这个算法, 注意数组大小要开两倍大. #include <algorithm> #include <iterator> #include <io ...
- git 生成密钥
1.本地安装好git: 2.桌面右键 Git Bash Here 打开git命令行: 3.ssh-keygen -t rsa -C "nideyouxiang@xxx.com" ...
- js操作cookie(创建、读取、删除)方法总结
js操作cookie,可以通过开源的插件实现,方便快捷,兼容性好,同样也可以自己写: 此文主要介绍两个常用的插件: Js.cookie.js 和 jQuery.cookie.js 0.Js.cooki ...
- Spring SpringMVC myBatis(简称SSM)理解
1对Spring的理解 (1)spring是什么? spring是Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架. (2)spring的作用 (a)spring ...
- 由于找不到opencv_world***d.dl,无法继续执行代码。重新安装程序可能会解决此问题。关于opencv使用imshow函数闪退解决方法等问题
1.将缺失的文件放到程序根目录的debug中 2.将Debug x64下的附加依赖项改为只有后缀为d.lib的那个库文件,去除另一个,问题就这么解决了,虽然我也不知道加上另一个为什么就会闪退
- 使用如下命令修改.bashrc文件
使用如下命令修改.bashrc文件: gedit ~/.bashrc 编辑之后必须执行 source ~/.bashrc