Преобразовать массив байтов в Int нечетный результат Java и Kotlin - PullRequest
0 голосов
/ 03 июля 2019

Содержимое Byte Array размера 4 следующее: {1, 0, 0, 0}. Это переводит к целому числу 1 в C # при использовании BitConverter.ToInt32(bytearray, 0);

Однако при преобразовании этого байтового массива в Integer в Kotlin с использованием следующей базы кода я получаю значение 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)
   }

Я считаю, что оба метода преобразования верны, а байтовые значения не подписаны.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

По предложению @Lother и itsme86.

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
}
0 голосов
/ 03 июля 2019

В C # у вас есть следующий класс:

var test0 = BitConverter.ToInt32(bytearray, 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...