Преобразование байта [] в число с плавающей запятой - PullRequest
0 голосов
/ 19 июня 2020
Float b = 0.995;
Byte[] a = Bitconverter.GetBytes(b);

Теперь мои значения byte[] - 82 184 126 63. Т.е.,

a[0] = 82, a[1] =184, a[2] = 126, and a[3] = 63.

Я хочу вернуться назад к байту с плавающей точкой, поэтому я использовал Bitconverter.Tosingle

Float b = Bitconverter.Tosingle(byte[] value,start index)

Я сомневаюсь, что мне нужно указать значение byte[] и начальный индекс.

Не могли бы вы поделиться в виде кода вместе с объяснением.

Ответы [ 3 ]

0 голосов
/ 19 июня 2020

Это работает для меня.

float val = (float)0.995;
Byte[] arr = BitConverter.GetBytes(val);

float myFloat = BitConverter.ToSingle(arr, 0);
0 голосов
/ 19 июня 2020

BitConverter.ToSingle (byte [] value, int startIndex)

Параметры

  • значение
    Byte []
    Массив байтов.
  • startIndex
    Int32
    Начальная позиция в пределах value .

Массив, который вы получаете, имеет длину всего 4 байта, вам нужно 4 байта для создания единственного, поэтому позиция должна быть 0 - все остальные дают вам исключения:

using System;

public class Program
{
    public static void Main()
    {
        var b = 0.995f;
        Byte[] a = BitConverter.GetBytes(b);
        Console.WriteLine("{0,16:f7}{1,20}\n", b, BitConverter.ToString(a));
        for (var pos = 0; pos < a.Length; pos++)
        {
            try {
                var c = BitConverter.ToSingle(a, pos);
                Console.WriteLine("{0} is valid:",pos);
                Console.WriteLine("{0}\n",c);
            }
            catch (Exception e)
            {
                Console.WriteLine("{0} is invalid: {1}",pos,e);
            }
        }
    }
}

Выход:

       0.9950000         52-B8-7E-3F

0 is valid:
0.995

1 is invalid: System.ArgumentException: Destination array is not long enough to copy all the 
              items in the collection. Check array index and length.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.BitConverter.ToSingle(Byte[] value, Int32 startIndex)
   at Program.Main() in d:\Windows\Temp\cowicrki.0.cs:line 13
2 is invalid: System.ArgumentException: Destination array is not long enough to copy all the 
              items in the collection. Check array index and length.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.BitConverter.ToSingle(Byte[] value, Int32 startIndex)
   at Program.Main() in d:\Windows\Temp\cowicrki.0.cs:line 13
3 is invalid: System.ArgumentException: Destination array is not long enough to copy all the 
              items in the collection. Check array index and length.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.BitConverter.ToSingle(Byte[] value, Int32 startIndex)
   at Program.Main() in d:\Windows\Temp\cowicrki.0.cs:line 13
0 голосов
/ 19 июня 2020

value - это просто массив байтов, содержащий число с плавающей запятой.
startIndex означает смещение, с которого функция преобразования начнет чтение 4 байтов, составляющих число с плавающей запятой из переданного массива. В вашем случае это должно быть просто 0.

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