【发布时间】:2017-02-23 08:00:16
【问题描述】:
给定以下变量:
float myFloat = 0xC0451EB8;
如何从 myFloat 获取 C0451EB8?
编辑:不知道为什么我在这里被否决而没有评论。我不是在问浮点数或 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
虽然第二个显然有效,但我只能访问 float 变量。
【问题讨论】:
-
你的意思是字符串?
-
是的,作为字符串或字节[] - 我只是想反转转换。
-
您可以尝试使用
.ToString("x")但这可能需要强制转换为 double 或 int -
对于不正确的重复目标,我深表歉意。你的问题实际上是这个问题的重复:stackoverflow.com/questions/74148/…。但是,给定一个具有该值的
float,您不能真正做您想做的事情,因为一旦您将0xC0451EB8存储到float变量中,您就会失去精度。你可以((uint)myFloat).ToString("X"),它会得到你"C0451F00",这是你将要得到的最接近的。 -
@PeterDuniho 谢谢你,我有一种感觉,我使用了一个不安全的值并且失去了精确度,但我在转换时把头发扯掉了。我以为我已经阅读了 SO 上所有可能的浮点到十六进制转换主题,但我想我忽略了这一主题。