2014-02-15 54 views
7

C我会这样做将数字的浮点数表示转换为DWORD。从地址获取值并将内容转换为DWORD。如何通过浮点表示将float转换为uint?

dwordVal = *(DWORD*)&floatVal; 

因此,例如44.54321将成为0x42322C3F

我该怎么做C#

+1

其实'*(DWORD *)&floatVal'是错误的方式做在C,因为它打破了C编译器依靠优化严格别名规则。正确的方法涉及工会(参见C99tc3脚注82)或'memcpy()'。 –

回答

12

可以使用BitConverter类:

uint value = BitConverter.ToUInt32(BitConverter.GetBytes(44.54321F), 0); 
Console.WriteLine("{0:x}", value); // 42322c3f 

你也可以做到这一点更直接使用unsafe context

float floatVal = 44.54321F; 
uint value; 
unsafe { 
    value = *((uint*)(&floatVal)); 
} 
Console.WriteLine("{0:x}", value); // 42322c3f 

不过,我强烈建议避免这一点。见Should you use pointers (unsafe code) in C#?

3

使用BitConverter类:

float f = 44.54321f; 
uint u = BitConverter.ToUInt32(BitConverter.GetBytes(f), 0); 
System.Diagnostics.Debug.Assert(u == 0x42322C3F);