好的,我想将一组 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);
}
谢谢!