繁体   English   中英

CRC16 问题,Kotlin 中的 UShort

[英]Issue with CRC16, UShort in Kotlin

我很难将一些 C 代码转换为 Kotlin/Java。 C 代码是正确的。 问题是 Kotlin 代码导致不同的 CRC16 校验和。

这是 C 代码:

// data_buf is of type uint8_t
uint16_t crc = 0;
for(uint32_t i = 0; i<BUF_SIZE; i++)
{
    crc += data_buf[i];
}

这是我在 Kotlin 中尝试过的,但它不起作用:

// DFUFile is of type ByteArray
var i = 0
var crc: UShort = 0u
while(i < DFUFile.size) {
    crc = (crc + DFUFile[i].toUShort()).toUShort()
    i += 1
}

我也尝试了以下代码,但它不会导致正确的数字。

// DFUFile is of type ByteArray
var crc = 0
var i = 0
while(i < DFUFile.size) {
     crc = (crc + DFUFile[i].toInt()) and 0x0000FFFF
     i += 1
}

由于 C 语言 data_buf 的类型为uint8_t[] ,因此您的 Kotlin 等效项需要是UByteArray 如果由于某种原因无法将其UByteArray ,则可以改为将每个元素设为 UByte:

var i = 0
var crc: UShort = 0u
while(i < DFUFile.size) {
    crc = (crc + DFUFile[i].toUByte()).toUShort()
    i += 1
}

或缩短一点:

var crc: UShort = 0u
for (byte in DFUFile) {
    crc = (crc + byte.toUByte()).toUShort()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM