Как преобразовать float в uint по представлению float?
на C
Я сделаю это, чтобы преобразовать представление float числа в DWORD. Возьмите значение из адреса и приведите содержимое в DWORD.
dwordVal = *(DWORD*)&floatVal;
например 44.54321
станет 0x42322C3F
.
как я могу сделать то же самое в C#
?
2 ответов
можно использовать BitConverter
класс:
uint value = BitConverter.ToUInt32(BitConverter.GetBytes(44.54321F), 0);
Console.WriteLine("{0:x}", value); // 42322c3f
вы также можете сделать это более непосредственно, используя unsafe
контекст:
float floatVal = 44.54321F;
uint value;
unsafe {
value = *((uint*)(&floatVal));
}
Console.WriteLine("{0:x}", value); // 42322c3f
тем не менее, я настоятельно рекомендую избегать этого. См.следует ли использовать указатели (небезопасный код) в C#?
используйте класс BitConverter:
float f = 44.54321f;
uint u = BitConverter.ToUInt32(BitConverter.GetBytes(f), 0);
System.Diagnostics.Debug.Assert(u == 0x42322C3F);