我需要将一个坐标值(一个浮点值)转换成protobuf对象,然后发送到服务器 问题是我需要把它转换成fixed64对象, 它有64位长,javascript不支持这么长的数字。在
我正在使用this库来创建我的protobuf缓冲区。 我发现了一个可以处理相同问题的python代码片段
def f2i(float):
return struct.unpack('<Q', struct.pack('<d', float))[0]
它使用struct库,基本上将浮点转换为二进制,然后再转换回long。 我需要得到同样的输出
所以51.366805将变成463242605243037296
失去一点精度不是最大的问题,我只需要转换值
正如您所提到的,JS不支持64位整数,因此您将无法获得相同的输出。最接近的是两个32位整数,它们代表同一个64位整数,这取决于Protobuf库期望的输入类型。在
我建议查看一下this question的可接受答案中的toFloat64()函数。在
下面是一个稍微简化的版本:
让我们试试看:
^{pr2}$输出:
其中0x4049aef3775b8130在转换回十进制数后确实是4632426052430037296。在
如果您真的需要一个原子JS号,最后一个选择是将它转换回53位精度的整数:
输出:
相关问题 更多 >
编程相关推荐