Java - 如何计算BitSet的CRC16
Java - How to calculate CRC16 of BitSet
我有一个 Java BitSet,其中有一些数据。这个 BitSet 的长度是 545 位。
问题:所有当前已知的实现只能使用字节数组,但是将我的 BitSet 转换为字节数组会更改数据,因为我需要进行一些填充。
是否有任何已知的实现可以处理我的数据而无需将其调整为整个字节?
使用.toByteArray()
将位转换为字节序列。您需要知道需要什么 CRC-16 定义(多项式、排序、预处理和 post 处理),以及处理位的顺序。 .toByteArray()
会将集合中的第一位放在第一个字节的最低有效位中。
然后你可以使用crcany生成你需要的CRC-16的C代码。生成的代码包括一个 crc16..._rem()
例程,用于用多个位更新 CRC。对于具有 n
位的 BitSet,您将首先计算前 n >> 3
个字节的 CRC。然后使用 crc16..._rem()
使用最后一个字节中的 n & 7
位更新 CRC。直接把C代码转成Java.
我有一个 Java BitSet,其中有一些数据。这个 BitSet 的长度是 545 位。 问题:所有当前已知的实现只能使用字节数组,但是将我的 BitSet 转换为字节数组会更改数据,因为我需要进行一些填充。 是否有任何已知的实现可以处理我的数据而无需将其调整为整个字节?
使用.toByteArray()
将位转换为字节序列。您需要知道需要什么 CRC-16 定义(多项式、排序、预处理和 post 处理),以及处理位的顺序。 .toByteArray()
会将集合中的第一位放在第一个字节的最低有效位中。
然后你可以使用crcany生成你需要的CRC-16的C代码。生成的代码包括一个 crc16..._rem()
例程,用于用多个位更新 CRC。对于具有 n
位的 BitSet,您将首先计算前 n >> 3
个字节的 CRC。然后使用 crc16..._rem()
使用最后一个字节中的 n & 7
位更新 CRC。直接把C代码转成Java.