'How to convert float to uint by float representation?
In C
I will do this to convert float representation of number into DWORD. Take the value from the address and cast the content to DWORD.
dwordVal = *(DWORD*)&floatVal;
So for example 44.54321
will become 0x42322C3F
.
How can I do the same in C#
?
Solution 1:[1]
You can use the BitConverter
class:
uint value = BitConverter.ToUInt32(BitConverter.GetBytes(44.54321F), 0);
Console.WriteLine("{0:x}", value); // 42322c3f
You could also do this more directly using an unsafe
context:
float floatVal = 44.54321F;
uint value;
unsafe {
value = *((uint*)(&floatVal));
}
Console.WriteLine("{0:x}", value); // 42322c3f
However, I'd strongly recommend avoiding this. See Should you use pointers (unsafe code) in C#?
Solution 2:[2]
Use the BitConverter class:
float f = 44.54321f;
uint u = BitConverter.ToUInt32(BitConverter.GetBytes(f), 0);
System.Diagnostics.Debug.Assert(u == 0x42322C3F);
Solution 3:[3]
bitconvert creates a new byte array on every call. this is the solution:
unsafe public static float ToDecibel(this float x)
{
uint* y = (uint*)&x;
(*y) &= 0x7fffffff;
return (*y) * 7.17711438e-7f - 764.6161886f;
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Community |
Solution 2 | MarcinJuraszek |
Solution 3 | Klaus Kobald |