// 大小端
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校验
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Spring boot开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空...
- 这个问题是这样子的: 用element-ui的表单组件,组件中自带表单校验,每个字段可自行设置数据类型,和触发校验...
- 近几日,公司项目要从eclipse转移到Android Studio中进行开发,但是导入之后,发现 AAPT er...