开发者

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


  1. How about endianess? Have you tried reversing the word order? In windows, 533174.1 is 98, 43, 2, 73.
  2. 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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜