串口通信中传输单位为byte,一个byte占用八位/8bit
常用的方法
1.一个Int转成一个byte 直接调用Int.toByte()方法
看如下直接转换
var num = 23
var num2Byte = num.toByte()
println("mytest num $num num2Byte$num2Byte")
结果一切正常
让这里的num=128结果如何?
转成byte结果变成了-1 具体是什么原因各位可以去补充下有趣的原码 反码 补码的相关知识。
所以一个int要想不丢失精度的情况转成byte这个int取值范围必须是**[-128-127]**之间
2.一个byte转成一个int 直接调用Byte.toByte()方法
var byteNum = Byte.MAX_VALUE
var byteNum2Int = byteNum.toInt()
println("mytest byteNum $byteNum byteNum2Int$byteNum2Int")
3.一个Int转成4个字节的byte数组
private fun intToByteArray4(num: Int): ByteArray {
var byteArray = ByteArray(4)
var highH = ((num shr 24) and 0xff).toByte()
var highL = ((num shr 16) and 0xff).toByte()
var LowH = ((num shr 8) and 0xff).toByte()
var LowL = (num and 0xff).toByte()
byteArray[0] = highH
byteArray[1] = highL
byteArray[2] = LowH
byteArray[3] = LowL
return byteArray
}
传入88
传入Int.MAX_VALUE 2147483647
这里为什么是[127,-1,-1,-1]请读者自行思考
4.一个Int转成2个字节的byte数组
private fun intToByteArray2(num: Int): ByteArray {
var byteArray = ByteArray(2)
var LowH = ((num shr 8) and 0xff).toByte()
var LowL = (num and 0xff).toByte()
byteArray[0] = LowH
byteArray[1] = LowL
return byteArray
}
4.将字节数组转成一个Int
ByteBuffer.wrap(bytes).int