【发布时间】:2012-10-17 20:09:09
【问题描述】:
好的,我想将一个 THREE.Vector3 数组有效地保存到本地存储中。由于 javascript 使用字符串工作,我想使用最有效的比特率将 32 位浮点数转换为字符串。即理想的 32 位浮点 = 4 * 8 位,这在 C++ 之类的东西中很容易实现
问题似乎是第一个 Javascript 字符串是包含一些填充的 UTF
http://en.wikipedia.org/wiki/UTF-8
其次,我当前使用的代码 0 被转换为 '' 然后被省略,使得转换后的字节长度不可靠。
String.fromCharCode(0) == ''
var float2str = function(num)
{
var bytestream = new Array();
var view = new DataView(new ArrayBuffer(4));
view.setFloat32(0,num);
bytestream.push(view.getUint8(0));
bytestream.push(view.getUint8(1));
bytestream.push(view.getUint8(2));
bytestream.push(view.getUint8(3));
return String.fromCharCode(view.getUint8(0),view.getUint8(1),view.getUint8(2),view.getUint8(3))
}
var str2float = function(str)
{
var bytestream = unpack(str)
var view = new DataView(new ArrayBuffer(4));
view.setUint8(0,bytestream[0]);
view.setUint8(1,bytestream[1]);
view.setUint8(2,bytestream[2]);
view.setUint8(3,bytestream[3]);
return view.getFloat32(0);
}
谢谢!
【问题讨论】:
-
为什么不能简单地将浮点数存储为浮点数?我的意思是,据我所知,localStorage 应该能够有效地存储所有 JavaScript 对象,无论它们的类型如何。
-
您到底从哪里听说过 javascript 只适用于字符串?
-
我认为他的意思是 localStorage 仅适用于字符串。
-
是的,我相信您必须在本地存储中存储一个字符串。如果你存储一个像 Pi - 3.142.. 这样的数字。每个数字都存储为 1 个字符,这是非常无用的
标签: javascript byte three.js chars