http://www.cnblogs.com/canny/archive/2004/12/27/82468.aspx
CRC的全称是循环冗余校验(Cyclic Redundancy Check),具体的描述可以参考:百度百科:CRC (循环冗余校验),地址为:https://baike.baidu.com/item/CRC/1453359
1. crc8校验接口 static uint8_t crc8( uint8_t * p_buffer, uint16_t buf_size ) { uint8_t crc = 0; uint8_t i=0; if(buf_size <= 0) { return crc; } while( buf_size-- ) { for ( i = 0x80; i != 0; i /= 2 ) {
CRC定义 CRC(Cyclic Redundancy Check),循环冗余校验,其特征是信息字段和校验字段的长度可以任意选定,CRC编码格式是在k位有效数据之后添加r位校验码,形成总长度为n(K+R)位的CRC码。
异或,就是不同为1,相同为0,运算符号是^。 0^0 = 0 0^1 = 1 1^1 = 0 1^0 = 1
最近做APP对接蓝牙设备开发,这里分享一下iOS对接蓝牙设备中需要注意的东西,大致包含下面这些方面:
CRC(Cyclic Redundancy Check),即循环冗余校验码,是通信领域中一种常用的数据校验码,通过一定算法,将计算结果附在数据后面一起进行传输,对传输的数据具有检错功能。
可编程USB转 UART/I2C /SMBusS/SPI/CAN/1 -Wire适配器USB2S 的温湿传感器
今天用到了CRC算法,在python中第一次用到该算法,本来以为要自己写,上网搜了一下,发现了很多现成的代码,不过代码参差不齐,基本上都不能直接用,花了点时间摸索了一下,找到了一个比较好用的工具,python下的crcmod库,为了加强记忆,也为了有相同需求的朋友少走弯路,把实现的过程总结一下:
与ODrive进行通讯需要对通讯端点进行一系列操作。理论上,端点上的数据可以是以任何方式序列化的任何类型的数据。数据包采用默认的序列化方式,对于您自定义的数据包,您必须自己去进行反序列化。未来我们可能会提供序列化功能。可以通过从端点0读取JSON来枚举可用的端点,从理论上讲,每个接口都可以不同(实际上并没有这么做)。每个端点都可以被用来发送和接收字节数据,有效字节数据的含义在JSON中进行了定义。 例如,int32端点的输入和输出是4字节的小字节序表示。 通常,组合的读/写请求的约定是交换,即返回的值是旧值。 自定义的端点可能不符合这种要求。 该协议有基于数据包的版本和基于流的变体。 适当地使用每个变体。 例如,USB默认运行基于数据包,而UART运行基于字节流。
想象这样的场景,有客户给你发机密文件。那你怎么确定你收到的文件就是客户发你的,而没有被第三方恶意篡改过呢?
CRC(Cyclic Redundancy Checksum)是一种纠错技术,代表循环冗余校验和。
Uchihash是一款功能强大的实用工具,可以帮助广大研究人员处理和分析嵌入在恶意软件之中的各种哈希,以节省恶意软件分析所需的时间。
用Verilog实现CRC-8的串行计算,G(D)=D8+D2+D+1,计算流程如下图所示:
http://free.cmsoft.cn/download/cmsoft/assistant/netassist5.0.2.zip
CRC(Cyclic Redundancy Check)循环冗余校验是常用的数据校验方法,讲CRC算法的文章很多,之所以还要写这篇,是想换一个方法介绍CRC算法,希望能让大家更容易理解CRC算法。 先说说什么是数据校验。数据在传输过程(比如通过网线在两台计算机间传文件)中,由于传输信道的原因,可能会有误码现象(比如说发送数字5但接收方收到的却是6),如何发现误码呢?方法是发送额外的数据让接收方校验是否正确,这就是数据校验。最容易想到的校验方法是和校验,就是将传送的数据(按字节方式)加起来计算出数据的总和,并将总和传给接收方,接收方收到数据后也计算总和,并与收到的总和比较看是否相同。如果传输中出现误码,那么总和一般不会相同,从而知道有误码产生,可以让发送方再发送一遍数据。 CRC校验也是添加额外数据做为校验码,这就是CRC校验码,那么CRC校验码是如何得到的呢? 非常简单,CRC校验码就是将数据除以某个固定的数(比如ANSI-CRC16中,这个数是0x18005),所得到的余数就是CRC校验码。 那这里就有一个问题,我们传送的是一串字节数据,而不是一个数据,怎么将一串数字变成一个数据呢?这也很简单,比如说2个字节B1,B2,那么对应的数就是(B1<<8)+B2;如果是3个字节B1,B2,B3,那么对应的数就是((B1<<16)+(B2<<8)+B3),比如数字是0x01,0x02,0x03,那么对应的数字就是0x10203;依次类推。如果字节数很多,那么对应的数就非常非常大,不过幸好CRC只需要得到余数,而不需要得到商。 从上面介绍的原理我们可以大致知道CRC校验的准确率,在CRC8中出现了误码但没发现的概率是1/256,CRC16的概率是1/65536,而CRC32的概率则是1/2^32,那已经是非常小了,所以一般在数据不多的情况下用CRC16校验就可以了,而在整个文件的校验中一般用CRC32校验。 这里还有个问题,如果被除数比除数小,那么余数就是被除数本身,比如说只要传一个字节,那么它的CRC就是它自己,为避免这种情况,在做除法之前先将它移位,使它大于除数,那么移多少位呢?这就与所选的固定除数有关了,左移位数比除数的位数少1,下面是常用标准中的除数: CRC8:多项式是X8+X5+X4+1,对应的数字是0x131,左移8位 CRC12:多项式是X12+X11+X3+X2+1,对应的数字是0x180D,左移12位 CCITT CRC16:多项式是X16+X12+X5+1,对应的数字是0x11021,左移16位 ANSI CRC16:多项式是X16+X15+X2+1,对应的数字是0x18005,左移16位 CRC32:多项式是X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1,对应数字是0x104C11DB7,左移32 因此,在得到字节串对应的数字后,再将数字左移M位(比如ANSI-CRC16是左移16位),就得到了被除数。 好了,现在被除数和除数都有了,那么就要开始做除法求CRC校验码了。CRC除法的计算过程与我们笔算除法类似,首先是被除数与除数高位对齐后,被除数减去除数,得到了差,除数再与差的最高位对齐,进行减法,然后再对齐再减,直到差比除数小,这个差就是余数。不过和普通减法有差别的是,CRC的加(减)法是不进(借)位的,比如10减01,它的结果是11,而不是借位减法得到的01,因此,实际上CRC的加法和减法所得的结果是一样的,比如10加01的结果是11,10减01的结果也是11,这其实就是异或操作。虽然说了这么多也不一定能说清楚,我们还是看一段CRC除法求余程序吧:
你对视频防抖了解多少?首先映入脑海的是云台?亦或是Pr内功能强大的增稳插件?那你有没有想过这样的想法,你可以在拍摄视频的时候将当前的相机位姿也同步的记录下来?后期可以通过一种算法按照位姿矫正回来?听起来有点awesome对吗?事实上GoPro已经拥有了这种技术,那我们平民窟蓝孩子可以整一个不?
我们的 Modbus 传感器开发套件共有三个, 三个板子的使用的主控方案是 STM32F030芯片,硬件接口资源如下图所示:
安装 [root@iZ116haf49sZ fio]# less README [root@iZ116haf49sZ fio]# ./configure Operating system Linux CPU x86_64 Big endian no Compiler gcc Cross compile no Sta
使用方法: gen_crc.pl 输入数据位宽 多项式 多项式输入方法: 从低位向高位依次输入,以USB TOKEN为例,x^5 + x^2 + 1,从低到高位输入为101001 usb token的crc生成方法: gen_crc.pl 8 101001 usb data的crc(x^16+x^15+x^2+1)生成方法: gen_crc.pl 8 10100000000000011
由于工作原因,需要一台 arm64 的服务器测试一些功能。但是目前这个点没法快速采购到腾讯云或者百度云的arm服务器(这俩公司的arm服务器好像都只是在内测阶段,据说得2022年初才能 Release)。想了一圈发现树莓派似乎正好有 arm64 的cpu,于是去官网确认了下 Specification:
以前为ARM64编译软件包,直接在Makefile里指定交叉编译器、sysroot的路径,就能成功编译。
secure boot 和FIT Image是前段时间接触到的,其实早就该总结下了,奈何懒癌犯了,拖了好久才写出来。
之前记录过处理因为 LVS 网卡流量负载过高导致软中断发生丢包的问题,RPS 和 RFS 网卡多队列性能调优实践[1],对一般人来说压力不大的情况下其实碰见的概率并不高。这次想分享的话题是比较常见服务器网卡丢包现象排查思路,如果你是想了解点对点的丢包解决思路涉及面可能就比较广,不妨先参考之前的文章如何使用 MTR 诊断网络问题[2],对于 Linux 常用的网卡丢包分析工具自然是 ethtool。
如何在台式机/笔记本电脑中设置 Red Hat Openshift 4.x?是否正在寻找一种经济高效的解决方案来获得 OCP 4.x 实验室环境?如果是,那么这篇文章适合你。Kubernetes 正在快速发展,越来越多的组织开始使用微服务。在 Kubernetes 方面,Openshift 以其企业功能和安全性脱颖而出。Red Hat 现在是一家 IBM 公司,不断改进 openshift 的产品和安装设置。OCP 4.x 安装与 OCP 3.x 完全不同。在 OCP 4.x 中,他们不再使用基于 ansible 的部署,而是附带安装程序二进制文件。该二进制文件能够直接在 ON-PREM 和 Cloud 中启动 openshift 环境。
Kubernetes 是一个开源的容器编排平台。它由 Google 开发,为自动化部署、扩展和管理容器化应用提供了一个开源系统。虽然大多数人在云环境中运行 Kubernetes,但在本地运行 Kubernetes 集群不仅是可能的,它还至少有两个好处:
测试需要,给一台1/4 rack的X8M HC刷机,使用oeda配置好的xml文件,执行命令列出本次刷机的所有步骤:
HDFS是存取数据的分布式文件系统,那么对HDFS的操作,就是文件系统的基本操作,比如文件的创建、修改、删除、修改权限等,文件夹的创建、删除、重命名等。对HDFS的操作命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。
从网络上下载了一个zip文件,最后却发现它是用密码保护的,或者自己用密码加密了一个很重要zip文件,但是一段时间后忘记了密码,无法打开。这个时候,我们就可能就需要对这个加密文件进行破解了。
我国信创生态的核心企业龙芯,其自主知识产权的 LoongArch指令集核心 maintainer 在 Linux 内核邮件列表了总结了他们近期对内核的贡献。
xz-utils 是一种使用 LZMA 算法的数据压缩/解压工具,文件后缀名通常为 *.xz,是 Linux 下广泛使用的压缩格式之一。
其实英伟达一直都是拥抱未来,拥抱开源的公司,对于边缘计算设备更是把所有能公开的都公开了,其实我就是便宜买了个TX1想用上AXG的软件服务,就算用不上也看看文档也是非常好的。
排查原因后发现是库没有连接,需要手动连接仓库下 lib 文件夹中的 libcrc.a 文件,运行如下编印命令成功编译:
关于防止android apk被反编译的技术我们前面已经讲了四种。他们分别是加壳技术、运行时修改字节码、伪加密、对抗JD-GUI,如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍。接下来我们接着介绍另一种防止apk反编译的技术-完整性校验。 一、完整性校验原理 所谓完整性校验就是我们用各种算法来计算一个文件的完整性,防止这个文件被修改。其中常用的方法就是计算一个文件的CRC32的值或者计算一个文件的哈希值。我们在防止apk被反编译的方法中也可以采用这种方法。我们知道apk生成的classes.d
MySQL :: Download MySQL Community Server (Archived Versions) (opens new window)
介绍 Sunxi SPINand mtd/ubi 驱动设计, 方便相关驱动和应用开发人员
当遇到某个Hash值时,我们当然可以根据每种Hash值的不同特征来识别其可能的Hash类型,但是这一过程是十分耗时和繁琐的,而我们每个人都希望生活向更简单的方向前进。所以也就有了这篇文章。 Hash Algorithm Identifier 使用过Kali Linux或者Backtrack Linux的人,应该都知道一款名为Hash identifier的工具,这是一款十分优秀的工具,没有它,也不会有我这款工具的出现。 但是Hash identifier的代码并不是很有效率,有大量的if-else-if,
CRC 校验码确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来,在目的系统中又被计算一次,两个数字进行比较,如果校验和相等,则该文件被认为是正确传输了。
作用 : 以<paths>中的URI作为参数,创建目录。使用-p参数可以递归创建目录
存储加速方向 存储软件自身软件栈 存储软件自身一般通过是通过减少软件栈开销来达到优化自身的目的,比如软件栈的一些校验或者保护算法可以通过CPU的特殊指令集对存储校验或者保护算法进行优化 网络IO Linux网络的开销一般比较大,封包和解包一般都是在CPU端进行,数据的可靠性需要依赖TCP协议栈,而TCP协议栈保证稳定的同时TCP的操作必须经过协议栈,这就带来了数据从用户态->内核态->网卡驱动开销。数据拷贝和CP开销让网络IO往往不低。因此可以所经过的网络中,可以把数据传输的任务从CPU中卸载,交给具有RD
3。1 module编程 module可以说是 Linux 的一大革新。有了 module 之后,写 device driver 不再是一项恶梦,修改 kernel 也不再是一件痛苦的事了。因为你不需要每次要测试 driver 就重新 compile kernel 一次。那简直是会累死人。Module 可以允许我们动态的改变 kernel,加载 device driver,而且它也能缩短我们driver development 的时间。在这篇文章里,我将要跟各位介绍一下 module 的原理,以及如何写一个 module。
一个IoT设备,官方不提供固件包,网上也搜不到相关的固件包,所以我从flash中直接读取。因为系统是VxWorks,能看到flash布局,所以能很容易把uboot/firmware从flash中分解出来。
这文之前发过,不过没多少人看到,并且现在我的观点也发生了点变化,所以重新修改一波。
2.使用binwalk -E + 固件名命令查看固件的熵值如下图,熵值接近于1,说明固件可能被加密或者压缩,因此要想得到固件的文件系统,需要寻找其解密或解压的逻辑
前言 上一篇我分享了Hadoop的压缩和编解码器,在我们开发的过程中其实是经常会用到的,所以一定要去掌握。这一篇给大家介绍的是Hadoop的数据完整性! Hadoop用户在使用HDFS储存和处理数据不会丢失或者损坏,在磁盘或者网络上的每一个I/O操作不太可能将错误引入自己正在读/写的数据中,但是如果 在处理的数据量非常大到Hadoop的处理极限时,数据被损坏的概率还是挺大的。 一、数据完整性概述 检测数据是否损坏的常用措施是:在数据第一次引入系统时计算校验和并在数据通过一个不可靠的同道
上一篇我分享了Hadoop的压缩和编解码器,在我们开发的过程中其实是经常会用到的,所以一定要去掌握。这一篇给大家介绍的是Hadoop的数据完整性!
EdgeCore AS6700 ONIE固件,用最新ONIE官方源编译 官方代码有一个bug:
在日常生活中,随机数实际上经常遇到,想丢骰子,抓阄,还有抽签。呵呵,非常简单就可以实现。那么在做程序设计,真的要通过自己程序设计出随机数那还真的不简单了。现在很多都是操作系统内核会提供相应的api,这些原始参数是获取一些计算机运行原始信息,如内存,电压,物理信号等等,它的值在一个时间段可以保证是唯一的了。好了,废话我就不说了。呵呵。
用于整合所有样本的体细胞突变注释结果,由\t分隔的许多列构成,开头的#为注释行,完整的MAF文件有100多列,官网有关于它的详细介绍:
“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。广播域,指的是广播帧(目标MAC地址全部为1)所能传递到的范围,亦即能够直接通信的范围。严格地说,并不仅仅是广播帧,多播帧(Multicast Frame)和目标不明的单播帧(Unknown Unicast Frame)也能在同一个广播域中畅行无阻。
领取专属 10元无门槛券
手把手带您无忧上云