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)
Slide 29
Slide 29 text
OK
Slide 30
Slide 30 text
But...
Slide 31
Slide 31 text
これでも良さそう
ということに資料作っている内に気付きました・・・
// 通信して受信した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)