java - Java - 如何计算 BitSet 的 CRC16
问题描述
我有一个 Java BitSet,我有一些数据。这个 BitSet 的长度是 545 位。问题:所有当前已知的实现只能使用字节数组,但是将我的 BitSet 转换为字节数组会改变数据,因为我需要做一些填充。是否有任何已知的实现可以处理我的数据而无需将其调整为整个字节?
解决方案
用于.toByteArray()
将位转换为字节序列。您需要知道需要什么 CRC-16 定义(多项式、排序、预处理和后处理),以及处理位的顺序。.toByteArray()
将把集合中的第一位放在第一个字节的最低有效位中。
然后您可以使用crcany为您需要的 CRC-16 生成 C 代码。生成的代码包括一个crc16..._rem()
用多个位更新 CRC 的例程。对于带有n
位的 BitSet,您将首先计算第一个n >> 3
字节的 CRC。然后使用最后一个字节中crc16..._rem()
的位更新 CRC 。n & 7
将 C 代码转换为 Java 很简单。
推荐阅读
- java - SoundPool 不播放声音
- java - 如何编写 C 或 Java 应用程序来处理 TCP SYN 请求
- ffmpeg - 如何使用FFmpeg android修剪带有seekbar的开始和结束位置的视频?
- python - 如何在 python 中限制 CPU 内核数(需要简单的决定)
- reactjs - 路由重定向到反应路由器中陷入循环的外部链接
- python - 显示带有 Q 值的 Q 表
- caching - 清除特定 Internet 缓存 vb6.0
- c# - 为 POST 发送的 Angular/C# 空正文
- azure - 调用 azure graph api 来获取 Get-PimAzureResourceRoleDefinition
- python-3.x - 我是 python 新手,我试图运行这个花哨的装饰器代码