[英]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.