Как преобразовать байты в int, используя битовый конвертер в c# - PullRequest
0 голосов
/ 11 марта 2020

У меня есть код, который возвращает массив байтов, который может быть один байт или более или менее. Проблема заключается в том, что когда я конвертирую байты несколько раз, я получаю сообщение об ошибке, потому что не могу определить, когда мне нужно использовать toInt32, toInt64 или toInt16. Другая проблема заключается в том, что иногда, когда я получаю один байт, я не могу преобразовать этот байт, используя указанные выше методы, потому что я продолжаю получать ошибки. Итак, как определить на основе длины или размера байтов, какой метод мне следует использовать.

//as in array of bytes byte[]
  var response = this.cc.Sendcc("SERIAL_NUMBER", 0x05, 0x80, 0x64, 0x04, 0x01, 0x21, (byte)1, (byte)1);

if (response .Length == 1)
{
     toInt32SerialNumber = BitConverter.ToInt16(response , 0);
}
else
{
     toInt32SerialNumber = BitConverter.ToInt32(response , 1);
}

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Попробуйте выполнить следующее: он будет обрабатывать все возможные значения / байты «ответа»:

if(response.Length<8)
{
    byte[] temp = new byte[8];
    response.CopyTo(temp, 0);
    response = temp;
}

UInt64 toInt32SerialNumber = BitConverter.ToUInt64(response, 0);

Кроме того, StartIndex должен быть нулевым, если вам не нужно намеренно пропустить некоторые данные!

0 голосов
/ 11 марта 2020

@ moe1792

Пожалуйста, попробуйте этот код, чтобы преобразовать массив байтов в целое число с использованием битового конвертера в c#:

byte[] bytes = { 0, 0, 0, 25 };

if (BitConverter.IsLittleEndian)
    Array.Reverse(bytes);

int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int : {0}", i);

Надеюсь, приведенный выше код будет вам полезен.

Спасибо.

...