problem converting 4-bytes array to float in C#
I'm using C# and reading bytes array from some controller and converting them to their types. all values (int,string) OK except the float values. The value that suppose to get is 533174.1. but when reading the array
byteArr[0]=2
byteArr[1]=73
byteArr[2]=98
byteArr[3]=43
getting some gibberis开发者_JAVA技巧h value.
I used the System.BitConverter.ToDouble(bytesArr,0)
and other methods without success.
please help.
Thanks,
Igal.
Your bytes are coming out word-swapped. This function should convert your byte array to floats properly:
static float ToFloat(byte[] input)
{
byte[] newArray = new[] { input[2], input[3], input[0], input[1] };
return BitConverter.ToSingle(newArray, 0);
}
ToFloat(new byte[]{2,73,98,43}) == 533174.1
- How about endianess? Have you tried reversing the word order? In windows, 533174.1 is 98, 43, 2, 73.
- 4 bytes are a single (ToSingle), not double.
To convert a byte array with four positions to float, BitConverter.ToSingle should be used, this function reads four positions within the array used, for example:
var input = new byte[]{103, 242, 50, 67};
var floatValue = BitConverter.ToSingle(input, 0);
floatValue = 178.946884
The BitConverter.ToSingle method receives two parameters: the byte array and the position where it will start taking the values.
We can also take an array with greater length and define where to start the conversions
var secondInput = new byte[]{103, 242, 50, 67, 227, 55, 179, 67};
var firtsFloatValue = BitConverter.ToSingle(input, 0);
var secondFloatValue = BitConverter.ToSingle(input, 4);
firtsFloatValue = 178.946884
secondFloatValue = 358.4366
Finally to obtain the value 533174.1 starting from [98, 43, 2, 73] we must use
var input = new byte[]{98, 43, 2, 73};
var floatValue = BitConverter.ToSingle(input, 0);
floatValue = 533174.1
精彩评论