byte数组计算校验和,帧头长度为12

 
private boolean matchCrc(byte[] readData, int packLength, intindex) {
int total = 0;
int x = 0;

// 计算校验和,这里帧头长度为12
for (x = index + 12; x < index + 12 + packLength &&x < readData.length; x++) {

total += readData[x];
if (readData[x] < 0) {
// System.out.println(readData[x] + "<0");
total += 256;
}
}
if ((index + 13 + packLength) < readData.length) {
if (readData[index + 12 + packLength] == (byte) ((total &0xff00) >> 8)
&& (readData[index + 13 + packLength] == (byte) (total& 0xff))) {
return true;
}
}
return false;
}


123456789101112 byte数组计算校验和,帧头长度为12
23+3/43+324+3/44+3
数据包(11+字节)
帧头  IP地址包长(数据长度)数据校验和
0x010xFF0xFF0xFF0xFF0xFF0xFF0xFF----……----
          包长后加起    

计算数组的CRC(循环冗余校验)校验码是一个常见的数据验证步骤,用于检测数据传输过程中是否有误。CRC通常通过位级运算来生成,对于数组,你需要按照以下步骤操作: 1. **选择 CRC 算法**: 首先确定要使用的CRC算法,例如CRC-8、CRC-16或CRC-32等。这些算法有不同的生成多项式。 2. **初始化寄存器**: 根据算法选择一个初始值,作为CRC寄存器的初始状态。 3. **处理数组元素**: 对于数组中的每个字节(如果是二进制数据),将它逐位左移并异或到CRC寄存器中,同时累加对应的生成多项式的系数。 4. **循环处理**: 对所有元素都执行上述步骤,直到数组处理完毕。 5. **结束添加**:在处理完最后一个字节后,还需要添加一个终结多扰项,这通常是原数据长度除以8的结果(因为CRC是对字节进行操作的)。 6. **生成校验码**: 最后的寄存器内容就是CRC校验码,通常是一个固定大小的十六进制数。 7. **存储校验码**: 将这个CRC校验码存储到数组的一个特定位置,以便后续检查数据完整性和一致性。 举个简单的例子,如果使用Python的`binascii.crc32()`函数,可以像下面这样操作: ```python import binascii def calculate_crc(array): initial_crc = binascii.crc32(b'', len(array)) # 初始化CRC for data_byte in array: initial_crc = binascii.crc32(data_byte.to_bytes(1, 'big'), initial_crc) # 添加字节 return hex(initial_crc & 0xffffffff) # 返回16进制表示的CRC # 使用示例 data_array = [b'your_data_here'] # 二进制数据 crc_value = calculate_crc(data_array) array_with_crc = list(array) + [int(crc_value, 16).to_bytes(4, 'big')] # 添加CRC到数组末尾 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值