簡體   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