下面是我的代码:
Int ->字节数组
private fun write4BytesToBuffer(buffer: ByteArray, offset: Int, data: Int) {
buffer[offset + 0] = (data shr 24).toByte()
buffer[offset + 1] = (data shr 16).toByte()
buffer[offset + 2] = (data shr 8).toByte()
buffer[offset + 3] = (data shr 0).toByte()
}
字符串
字节数组-> Int
private fun read4BytesFromBuffer(buffer: ByteArray, offset: Int): Int {
return (buffer[offset + 0].toInt() shl 24) or
(buffer[offset + 1].toInt() shl 16) or
(buffer[offset + 2].toInt() shl 8) or
(buffer[offset + 3].toInt() and 0xff)
}
型
对于**-32,768和32,767**之间的任何值,它都不会有任何问题。但是,它不适用于较大的值。举例来说:
val buffer = ByteArray(10)
write4BytesToBuffer(buffer, 0, 324)
read4BytesFromBuffer(buffer, 0) // It returns 324 ***OK***
val buffer = ByteArray(10)
write4BytesToBuffer(buffer, 0, 40171)
read4BytesFromBuffer(buffer, 0) // It returns -25365 ***ERROR***
型
你知道我错在哪里了吗?
4条答案
按热度按时间cngwdvgl1#
这是解决方案。
Int ->字节数组
字符串
或者用更短的方式
型
字节数组-> Int
型
9fkzdhlc2#
我会用java.nio.ByteBuffer-
字符串
b4lqfgs43#
这里有一个行程序,它会给予你一个ByteArray:
字符串
可选地设置字节数(大小),您可以转换Shorts,Ints,Long.
就这么叫吧:
型
wmvff8tz4#
你可以写一个extension function:
字符串
现在你可以使用它:
型
反之亦然:
型
并使用它:
型