将缓冲区存储在DataView中,然后在Float64Array不工作的情况下提取
Store buffer in DataView then extract with Float64Array not working
我想将缓冲区写入数组,然后使用Float64Array视图访问该数组。这似乎比它应该做的要困难得多。我使用了mozilla文档,但仍然存在问题。。。。
我已经尝试了以下的多种变体。有人知道为什么不起作用吗?最后,我应该能够打印出第一个浮动,即4。
//64 bit floating point numbers with 8 bytes each in hex
//first float64 bytes : 4 = 0x4010000000000000
//second float64 bytes : 5 = 0x4014000000000000
//2 x 8 bytes in a buffer with each hex number
var buff = new Buffer("40100000000000004014000000000000", "hex");
var ab = new ArrayBuffer(buff.length);
var view = new DataView(ab);
for (var i = 0; i < buff.length; ++i) {
view[i] = buff[i];
}
console.log(new Float64Array(ab).length);//prints 2
console.log(new Float64Array(ab)[0]);// SHOULD print '4' but prints 0
由于endianness导致的问题。使用节点缓冲区API:
var buff = new Buffer("40100000000000004014000000000000", "hex");
buff.readDoubleLE(0) // 2.0553e-320
buff.readDoubleBE(0) // 4
如果我们反向buff并从第8字节读取:
var buffRev = new Buffer("00000000000014400000000000001040", "hex")
buff.readDoubleLE(8) // 4
buff.readDoubleBE(8) // 2.0553e-320
如果您了解更多,请随时更正/扩展。
我最终意识到,实际上数据需要以正确的块读取视图。在我提供的示例中,这意味着两次读取8个字节。每次读取都需要填充Float64Array中的一个项目。令人惊讶的是,这并不容易,而且我不能用整个底层缓冲区来填充ArrayBuffer。
不管怎样,这就是我的结局。。。
var buff = new Buffer("40100000000000004014000000000000", "hex");
var ab = new ArrayBuffer(buff.length);
var view = new Float64Array(ab);
var viewIndex = 0;
for (var bufferIndex=0;bufferIndex<buff.length;bufferIndex=bufferIndex+8) {
view[viewIndex] = buff.readDoubleLE(bufferIndex);
viewIndex++;
}
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- 将缓冲区存储在DataView中,然后在Float64Array不工作的情况下提取