user3535716
user3535716

Reputation: 255

How to convert an array of signed bytes to float?

I just got confused about how to convert an array of 4 signed bytes to a float number.

I just know for an array of unsigned bytes bts, probably I can use this function

BitConverter.ToSingle(bts, 0);

However, it looks like BitConverter.ToSingle only accepts byte array instead of sbyte array.

Could somebody give me some ideas please?

Thanks!

Upvotes: 2

Views: 1403

Answers (5)

Giuseppe Laera
Giuseppe Laera

Reputation: 310

Call GetFloatValue method passing una array of four sbyte as parameter

    public float GetFloatValue(sbyte[] data)
    {
        return bytesToFloat(data[0], data[1], data[2], data[3]);
    }

    private static float bytesToFloat(sbyte b0, sbyte b1, sbyte b2, sbyte b3)
    {
        int mantissa = (byte)b0 + ((byte)b1 << 8) + ((byte)b2 << 16);
        return (float)(mantissa * Math.Pow(10, b3));
    }

Upvotes: 0

Lynx
Lynx

Reputation: 506

Maybe this:

float num = 0;

for (int i = 0; i < sbytesArr.Length; i++)
{
     num = (num | sbytesArr[i]) << i * 4;
}

Upvotes: 1

usr
usr

Reputation: 171246

It is a little known fact that byte and sbyte are interchangeable at the CLR level:

sbyte[] a = new sbyte[1];
byte[] b = (byte[])(object)a;

This code actually works at runtime. So can pass in the array that you have.

BitConverter.ToSingle((byte[])(object)bts, 0);

Upvotes: 1

David Heffernan
David Heffernan

Reputation: 613481

Assuming that your signed bytes are in an array named sbts you can first of all convert to an unsigned byte array, and then use BitConverter.ToSingle().

byte[] bts = new byte[sbts.Length];
Buffer.BlockCopy(sbts, 0, bts, 0, sbts.Length);
float f = BitConverter.ToSingle(bts, 0);

Upvotes: 1

Kumar Manish
Kumar Manish

Reputation: 3772

    Float value = 5000.1234;
//
// Invoke BitConverter.GetBytes to convert double to bytes.
//
byte[] array = BitConverter.GetBytes(value);
foreach (byte element in array)
{
    Console.WriteLine(element);
}
//
// You can convert the bytes back to a double.
//
Float result = BitConverter.Tofloat(array, 0);
Console.WriteLine(result);

Upvotes: 1

Related Questions