【发布时间】:2010-12-08 12:52:04
【问题描述】:
假设我有一个十六进制数“4072508200000000”,并且我希望将其以 IEEE-754 双精度格式表示的浮点数 (293.03173828125000) 放入 JavaScript 变量中。
我可以想到一种使用一些掩码和调用 pow() 的方法,但有没有更简单的解决方案?
需要客户端解决方案。
这可能会有所帮助。这是一个网站,可让您输入 IEEE-754 的十六进制编码并分析尾数和指数。
http://babbage.cs.qc.edu/IEEE-754/64bit.html
因为人们总是倾向于问“为什么?”,原因如下:我正在尝试填写 Google 的 Procol Buffers (protobuf) 的现有但不完整的实现。
【问题讨论】:
-
就我个人而言,我会先用正则表达式将十六进制值分割成单独的部分。然后,我会将它们评估为整数,最后我会尝试将它们转回浮点数。这似乎是一件很棘手的事情,因为您必须这样做,以便 Javascript 运行时不会在此过程中丢失任何位。
-
为了获得最大的可移植性,您应该考虑 IEEE-754 双精度可以是大端或小端。如果您知道十六进制输入使用哪种约定,则使用 pow() 的客户端解决方案应该是可移植的。如果您决定使用某种类型的双关语方法,则必须首先检查双精度的客户端平台字节序。
-
@Jim Lewis:我确实有一个标志可以告诉我大端或小端。
-
@Pointy,但是如何“把它们变成一个浮点数”。不做a*pow(2^b)是不行的,还是有别的办法?
-
@jim Lewis。我确实在寻找一种类型双关语的方法,但想不出 JavaScript 会允许它的方式。
标签: javascript double hex ieee-754