首页 > 解决方案 > Java - 如何计算 BitSet 的 CRC16

问题描述

我有一个 Java BitSet,我有一些数据。这个 BitSet 的长度是 545 位。问题:所有当前已知的实现只能使用字节数组,但是将我的 BitSet 转换为字节数组会改变数据,因为我需要做一些填充。是否有任何已知的实现可以处理我的数据而无需将其调整为整个字节?

标签: javacrccrc16

解决方案


用于.toByteArray()将位转换为字节序列。您需要知道需要什么 CRC-16 定义(多项式、排序、预处理和后处理),以及处理位的顺序。.toByteArray()将把集合中的第一位放在第一个字节的最低有效位中。

然后您可以使用crcany为您需要的 CRC-16 生成 C 代码。生成的代码包括一个crc16..._rem()用多个位更新 CRC 的例程。对于带有n位的 BitSet,您将首先计算第一个n >> 3字节的 CRC。然后使用最后一个字节中crc16..._rem()的位更新 CRC 。n & 7将 C 代码转换为 Java 很简单。


推荐阅读