kotlin中Int Byte的相互转换,常用

串口通信中传输单位为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

猜你喜欢

转载自blog.csdn.net/qq910689331/article/details/107732001
今日推荐