toInt()して下位1byteだけ取り出す 1. 符号無しとして扱ったときの最⼤値が⼗分に表現できる型へ変換 2. 不要な部分はマスクして捨てる // 通信して受信したデータだとする val received = 0x80.toByte() // 10進数で 128 と出⼒されるのが期待値 println(received.toInt() and 0xff) result 128
in Kotlin 2の補数表現の事を考慮して・・・ // 通信して受信したByteArrayだとする val received = read() val size = received[0] val body = received.slice(1 until size + 1) val checkSum = received[size + 1] val sum = body.map { it.toLong() and 0xff }.sum() val isValid = (sum and 0xff) == (checkSum.toLong() and 0xff) println(isValid)
これでも良さそう ということに資料作っている内に気付きました・・・ // 通信して受信したByteArrayだとする val received = read() val size = received[0] val body = received.slice(1 until size + 1) val checkSum = received[size + 1] //val sum = body.map { it.toLong() and 0xff }.sum() val sum = body.sum() //val isValid = (sum and 0xff) == (checkSum.toLong() and 0xff) val isValid = sum and 0xff == checkSum.toInt() println(isValid)