// 大小端
object CrcUtils {
fun getCrc16Str(arr_buff: ByteArray, little_endian: Boolean = true): ByteArray {
val len = arr_buff.size
// 预置 1 个 16 位的寄存器为十六进制FFFF, 称此寄存器为 CRC寄存器。
var crc = 0xFFFF
for (i in 0 until len) {
crc = ((crc and 0xFF00) or (crc and 0x00FF) xor (arr_buff[i].toInt() and 0xFF))
for (j in 0 until 8) {
// 把 CRC 寄存器的内容右移一位( 朝低位)用 0 填补最高位, 并检查右移后的移出位
if ((crc and 0x0001) > 0) {
// 如果移出位为 1, CRC寄存器与多项式A001进行异或
crc = crc.shr(1)
crc = crc xor 0xA001
} else {
// 如果移出位为 0,再次右移一位
crc = crc.shr(1)
}
}
}
val result = ByteArray(2)
result[if(little_endian) 0 else 1] = (crc.shr(8) and 0xFF).toByte()
result[if(little_endian) 1 else 0] = (crc and 0xFF).toByte()
return result
}
}
Kotlin中进行CRC校验
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- Spring boot开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空...
- 这个问题是这样子的: 用element-ui的表单组件,组件中自带表单校验,每个字段可自行设置数据类型,和触发校验...
- 近几日,公司项目要从eclipse转移到Android Studio中进行开发,但是导入之后,发现 AAPT er...