BCC异或校验及BCC在Matlab中的实现

  • BCC异或校验算法
  • BCC异或校验算法的MATLAB实现
  • 总结

BCC异或校验算法

BCC异或校验算法较常用于数据包发送中校验位的计算,其方法是依次对前面的每个数进行按位异或,然后组合成一个新的数作为下一个字节的数据。
这里举例说明:
要发送的数据包如下:
24 5F 61

注意:这三个数都是16进制的,即每个数占用1字节;即为0x24, 0x5F, 0x61;

下一字节数据为前三个字节数据BCC校验位
首先将这三个数转变为二进制

24: 0010 0100
5F: 0101 1111
61: 0110 0001

首先对24和5F进行按位异或计算:

0010 0100
0101 1111
—————
0111 1011

之后再与61进行按位异或计算:

0111 1011
0110 0001
—————
0001 1010

故最后这三个16进制一字节的数据的异或校验位为1A。

BCC异或校验算法的MATLAB实现

Matlab中并没有现成的BCC算法的函数,且网上并没有找到BCC算法的Matlab实现,于是尝试自己编写,在编写中发现主要涉及进制转换和数据类型转换,故在这里记录下来,直接放出函数:

function [ outputDec ] = BCC( inputDec )
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明
%进行BCC异或校验
%输入为16进制字符串
%输出为1字节16进制
inputDec1=inputDec(:,1);
inputDec2=inputDec(:,2);
tempNum=uint8(dec2bin(hex2dec(inputDec1(1)),4)); %将第一个数赋值给tempNum
for i=1:(length(inputDec1)-1)tempNum=bitxor(tempNum,uint8(dec2bin(hex2dec(inputDec1(i+1)),4))); %与下一个16进制数值异或
end
if mod(length(inputDec1), 2) ~= 0tempNum=char(tempNum);
elsetempNum=num2str(tempNum);
end
hex1=dec2hex(bin2dec(tempNum)); %获得16进制数高位tempNum=uint8(dec2bin(hex2dec(inputDec2(1)),4)); %将第一个数赋值给tempNum
for i=1:(length(inputDec2)-1)tempNum=bitxor(tempNum,uint8(dec2bin(hex2dec(inputDec2(i+1)),4))); %与下一个16进制数值异或
end
if mod(length(inputDec2), 2) ~= 0tempNum=char(tempNum);
elsetempNum=num2str(tempNum);
end
hex2=dec2hex(bin2dec(tempNum)); %获得16进制数低位outputDec=[hex1 hex2];%将高低位合并输出

使用该函数时,输入为如下格式:

input=[‘24’;‘5F’;‘61’]
BCCoutput=BCC(input);

可以得到结果输出为1A,如下:

总结

虽然目前有很多现成的校验位计算器,但是当要发送的数据不是定值时,仍然需要通过函数对校验位进行计算,以上主要为大家提供一个在Matlab环境下可用的BCC校验位计算函数。

BCC异或校验及BCC在Matlab中的实现相关推荐

  1. BCC异或校验 Linux C

    1.BCC异或校验 从输入的HEX第一个字节开始,按字节依次循环计算异或值直到HEX结尾字节,得到的最终一个字节值. 2.C程序 /********************************** ...

  2. 【Python】快速实现BCC (异或)校验的计算

    项目场景: 例如:数据的处理合格校验的过程中,出现需要(异或)校验的情况,这边只会python 脚本,那就快速来完成并记录一下吧 BCC(Block Check Character/信息组校验码),因 ...

  3. 【JavaScript】硬件通讯数据校验 BCC异或校验生成 按位取反 十六进制数据格式化

    十六进制(简写为hex或下标16)是一种基数为16的计数系统,是一种逢16进1的[进位制].通常用数字0.1.2.3.4.5.6.7.8.9和字母A.B.C.D.E.F(a.b.c.d.e.f)表示, ...

  4. Java 进行BCC异或校验

    功能是将传进去的一组十六进制字符串,将其转换成十六进制的异或值 如: hex 31353738 return 1578 public static String getBCC(String hex) ...

  5. 异或校验算法 c语言程序,C# 异或校验算法

    C# 的异或校验算法 直接上代码 public partial class FormCRC : Form { public FormCRC() { InitializeComponent(); } p ...

  6. matlab实现BCC异或,C#编程之C# BCC异或校验法

    本文主要向大家介绍了C#编程之C# BCC异或校验法,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. 通讯协议中最后一位是校验位 采用BCC(异或校验)法 这个怎么解释? 就是 把16进制 ...

  7. BCC校验(异或校验)原理

    BCC校验(异或校验)原理 BCC(Block Check Character/信息组校验码),因校验码是将所有数据异或得出,故俗称异或校验.具体算法是:将每一个字节的数据(一般是每两个16进制的字符 ...

  8. DSP学习--BCC校验(异或校验)

    检验值(LRC) Data 部分数据各字节异或值. 参看:BCC校验(异或校验)在线计算 #include <stdio.h> #include <string.h> #inc ...

  9. BCC校验(异或校验)在线计算

    BCC校验(异或校验)在线计算 http://www.ip33.com/bcc.html

最新文章

  1. python PyQt5.QtWidgets.QApplication().exec_()函数 QCoreApplication.exec_()(进入主事件循环并等待直到调用exit()为止)
  2. JDK12的新特性:teeing collectors
  3. android content provider线程安全,Android ContentProvider的线程安全(二)
  4. php pdf添加水印图片,php pdf添加水印(中文水印,图片水印)
  5. 126套Unity3D视频教程全集(包含入门、编程、特效、UI、动画、实战等等)
  6. Android系统韦根调试从驱动到应用(一)
  7. 大学计算机基础知识电子版,(完整版)大一大学计算机基础课程知识点.pdf
  8. 2019年计算机操作系统考研真题
  9. Java 编写一个类Letter,要求该类创建对象p,并调用方法printLetter输出英文字母表。
  10. 无法访问该文件可能已损坏 或者服务器,win7系统打开xls文件提示无法访问文件可能损坏的解决方法...
  11. selenium3 设置浏览器安装的位置
  12. 追求技术之美:云计算开发者的自我修养
  13. linux好几百g空间使用,linux磁盘空间被占用100%-148
  14. zabbix结合qqmail发送告警信息
  15. 基于微信小程序的自来水收费系统设计与实现-计算机毕业设计源码+LW文档
  16. 抽样调查理论与方法期末复习笔记
  17. sd卡怎么恢复数据?sd卡照片恢复,只需1个方法就能做到?
  18. 每天读一点好玩心理学--心理学
  19. 如何保证申请内存的地址是4的倍数
  20. Python中的sort()使用方法

热门文章

  1. 第一次机房收费系统总结
  2. 一个巨型的ESP8266模块,围观围观
  3. 【数分书单】分析思维《一本小小的蓝色逻辑书》第四章小结
  4. 在IOS上YUV NV21格式的CVPixelBufferRef转opencv的RGB格式cv::Mat的方法
  5. firefly的RK3399AIOC开发板+海康工业相机抓图预览
  6. Sony xperia xz1compact - 重刷固件ROM和解锁ROOT教程
  7. 数据模型与数据库之间的关系
  8. 「学习笔记」移动Web开发之flex布局9
  9. dell一键还原出厂设置(dell一键还原出厂设置找不到恢复环境)
  10. FFT算法再学以及终于理解