2017-02-23 52 views
1

考虑以下变量:转换浮到十六进制格式

float myFloat = 0xC0451EB8; 

如何获得C0451EB8从myFloat?

编辑:不知道为什么我在这里投票没有评论。我不问一个浮点或uint32的简单十六进制表示。我可以做这个。鉴于上述变量定义和的[可能的共同]答:

string FloatAsHex(float myFloat) { 
    return BitConverter.ToString(BitConverter.GetBytes(myFloat)); 
} 

FloatToHex(0xC0451EB8); //will output 1F-45-40-4F, not what I expect 
FloatToHex(BitConverter.ToSingle(BitConverter.GetBytes(0xC0451EB8))) //works 

虽然第二个明显的作品,我只能访问到浮点型变量。

+0

你的意思是一个字符串? –

+0

是的,作为一个字符串或字节[] - 我只是想扭转转换。 – nullable

+1

您可以尝试使用'.ToString(“x”)',但这可能需要强制转换为double或int –

回答

1

有没有办法来完成你的要求。您的代码将存储整数值0xC0451EB8或十进制3225755320,存储在类型为float的变量中。该整数值具有32位的精度,但float不能表示32位的数字精度,因为float值的32位中的一些被提交给指数。

因此,整数值3225755320被截断为3225755392

,就可以把floatuint,然后使用标准机制格式化为十六进制字符串值。例如。 ((uint)myFloat).ToString("X")。但是当你这样做时,你将从截断值开始,输出将是"C0451F00"(或者如果在格式字符串中包含标准十六进制说明符前缀,则为"0xC0451F00")。

截断原始值后,无法恢复它。你不能逆转这个过程。

+0

感谢彼得,毫不奇怪,我甚至没有尝试简单的转换为无符号整数,然后得到格式化的字符串。这现在工作。也感谢您的详细解释,非常感谢。 – nullable

0

文档说使用BitConverter.ToString Method (Byte[]) on msdn

这将在十六进制基地返回数字的字符串表示。 范例(用于代表数量的字节数组):

00-01-02-04-08-10-20-40-80-FF 
+0

对不起,这不起作用。这将输出1F-40-45-1F,我期望它输出B8-1E-45-C0 – nullable