我正在尝试生成包含浮点文字的 LLVM 文本 IR。为了使其可靠地工作,我需要能够将 float 转换为其十六进制文字表示形式。例如,结果应如下:
f2hex(0.0001) -> "0x3F1A36E2E0000000"
f2hex(0.1) -> "0x3FB99999A0000000"
f2hex(1.1) -> "0x3FF19999A0000000"
f2hex(3.33333) -> "0x400AAAA8E0000000"
f2hex(4.9) -> "0x40139999A0000000"
f2hex(111.99998) -> "0x405BFFFFA0000000"
我会满足于算法的详细描述(不依赖于 Javascript 不可用的库或机器代码),但工作的 Javascript 代码更好。
LLVM 语言引用在这里描述了格式:http://llvm.org/docs/LangRef.html#simple-constants
最佳答案
您想要做的是转储 double 的二进制表示形式。以下是在 C 中完成的方法:
float f = ... // also works with double
char str[19];
sprintf(str, "0x%llX", f);
要在 Javascript 中执行此操作,您需要提取 float 的二进制表示形式。这并不是一件小事,但幸运的是,Stackoverflow 上似乎已经有一个解决方案:Read/Write bytes of float in JS (具体来说,this answer 似乎很方便)
关于javascript - 在 Javascript 中生成 LLVM 浮点十六进制文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072354/