Я пытаюсь преобразовать собственный помощник по обработке байтов BLE в Kotlin.В процессе, я заметил, что в
JAVA
myByteArray[offset] += (byte)(exponent & 0xFF);
он работает как положено, но при преобразовании в kotlin KOTLIN
myByteArray[offset] += (exponent and 0x0F shl 4).toByte()
Я получаю ошибки, что ожидается целое число.Поэтому я предполагаю, что
"+ ="
- это моя проблема, которая вызывает целое число.Итак, у меня есть два вопроса.
1) Что именно + = делает с байтами.Я понимаю, что
b + = 1
равноэквивалентно
b = (байт) (b + 1)
но что именно происходит с байтами.Происходит ли смещение или преобразование в целое число, добавление значений обратно в байт?
2) Что такое эквивалентный в Kotlin и почему он не работает в Kotlin.Я также попытался сделать
myByteArray[offset] = myByteArray[offset] + (exponent and 0x0F shl 4).toByte()
Для записи это преобразование целочисленного значения в 32-битное число с плавающей запятой, если вам интересно.Не уверен, поможет ли это вообще.
Полный код, если вас это интересует:
mantissa = intToSignedBits(mantissa, 12)
exponent = intToSignedBits(exponent, 4)
myByteArray[offset++] = (mantissa and 0xFF).toByte()
myByteArray[offset] = (mantissa shr 8 and 0x0F).toByte()
myByteArray[offset] += (exponent and 0x0F shl 4).toByte() //hates this line
ПРИМЕЧАНИЕ * В нем говорится
this
потому что я написал его как расширение ByteArray, так что думайте об этом как о самом byteArray.
KOTLIN-версия его (ОШИБКИ)
JAVA-версия (без ошибок):
Я хочу больше, чем просто ответ, но я 'Я возьму это, лол.Я хотел бы понять немного больше о том, что здесь происходит, чтобы я мог решить это самостоятельно и в будущем.Заранее спасибо всем, кто нашел время, чтобы объяснить и помочь.
Также пока мы находимся на этой теме;).
private int unsignedByteToInt(byte b) {
return b & 0xFF;
}
почему это работает на Java, но не работает в Kotlin.
private fun unsignedByteToInt(b: Byte): Int {
return b and 0xFF
}
Должен быть честным, мне надоело писать вспомогательные классы Java для обработки байтов, поэтому я пытаюсь выяснить идиомы обработки байтов Kotlin.«и», похоже, имеют перегрузки только для Ints, а байты не рассматриваются как Ints в Kotlin.
Так что в качестве дополнительного вопроса, если вы сможете это объяснить, я также был бы признателен за это.