代码之家  ›  专栏  ›  技术社区  ›  FlatAssembler

如何在PHP中将浮点数转换为IEEE754十六进制字符串?

php
  •  0
  • FlatAssembler  · 技术社区  · 11 月前

    我正在考虑重写我的 Arithmetic Expression Compiler 从JavaScript到PHP,这样它也可以在不支持JavaScript的浏览器中使用。一个奇怪的问题是,GNU汇编器不支持将浮点数转换为IEEE754十六进制,而是依靠编译器来实现

            getIEEE754 = function (decimalNumber) {
              var floatArray = new Float32Array([decimalNumber]);
              var buffer = floatArray.buffer;
              var intArray = new Int32Array(buffer);
              return (
                (highlight ? '<span style="color:#007700">' : "") +
                "0x" +
                intArray[0].toString(16) +
                (highlight ? "<\/span>" : "")
              );
            };
    

    那么,你是如何在PHP中做到这一点的呢?

    1 回复  |  直到 11 月前
        1
  •  2
  •   shingo    11 月前

    使用 pack 将浮点值转换为二进制字符串。使用 unpack 以将二进制字符串转换为整数。使用 dechex 以将整数转换为十六进制表示。

    function getIEEE754($decimalNumber) {
        return '0x' . dechex(unpack('L', pack('f', $decimalNumber))[1]);
    }