大小为Byte
Array
的内容如下:
{1, 0, 0, 0}
。使用1
BitConverter.ToInt32(bytearray, 0);
。
但是,使用以下代码库在Kotlin中将此字节数组转换为Integer
时,我得到的是值16777216
而不是1
的值。
var test0 = BigInteger(bytearray).toInt() = 16777216
var test1 = BigInteger(bytearray).toFloat() = 1.6777216
或
fun toInt32(bytes: ByteArray, index: Int): Int
{
if (bytes.size != 4)
throw Exception("The length of the byte array must be at least 4 bytes long.")
return 0xff
and bytes[index].toInt() shl 56
or (0xff and bytes[index + 1].toInt() shl 48)
or (0xff and bytes[index + 2].toInt() shl 40)
or (0xff and bytes[index + 3].toInt() shl 32)
}
我相信两种转换方法都是正确的,并且字节值没有符号。
答案 0 :(得分:2)
一个稍微不同的解决方案,我认为它会更有效:
Object id
答案 1 :(得分:1)
这是,
fun toInt32(bytes:ByteArray):Int {
if (bytes.size != 4) {
throw Exception("wrong len")
}
bytes.reverse()
return ByteBuffer.wrap(bytes).int
}
答案 2 :(得分:0)
如@Lother及其its86所建议。
fun littleEndianConversion(bytes: ByteArray): Int
{
var result = 0
for (i in bytes.indices)
{
if (i == 0)
{
result = result or (bytes[i].toInt() shl 8 * i)
}
else
{
result = result or (bytes[i].toInt() shl 8 * i)
}
}
return result
}
答案 3 :(得分:-1)
在C#中,您拥有以下课程:
export NODE_OPTIONS=--max_old_space_size=8192