首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Uint8Array中将Float64Array转换为JavaScript

在Uint8Array中将Float64Array转换为JavaScript
EN

Stack Overflow用户
提问于 2018-12-12 01:11:49
回答 1查看 1.5K关注 0票数 4

假设我有一个由4096个项组成的Uint8Array,其中每个项的值都是0xff或255。我想将这个数组转换为一个Float64Array,其中前一个数组的8个值对应于一个64位浮点数。我试过这样的代码:

代码语言:javascript
运行
复制
 // Every item is 1 byte in pixels array, I want 8 of them to represent
 // a 64-bit float in the float64Array
 let pixels = new Uint8Array([255, 255, 255 ... , 255]); // 4096 values
 let floatArr = new Float64Array(pixels.buffer); // Should be 512 values
 console.log(floatArr); // This shows NaNs all over.

我已经看到了更多的问题,似乎与我所问的接近,但我无法从提供给他们的答案中得到这个想法。在查看了Mozilla文档之后,在我看来,这似乎是正确的使用方式,但是,我并没有得到预期的结果。我怎样才能做到这一点?此外,我仅限于浏览器,您可以假设最新版本。

编辑:示例运行的预期结果是:

代码语言:javascript
运行
复制
// pixels array is the input
let pixels = new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]); // 16x 0xff, 16 bytes
let floatArr = new Float64Array(pixels.buffer) // I expect this to be
// [0xffffffffffffffff, 0xffffffffffffffff] which is 8bytes x 2,
// Float64Array [ 18446744073709552000, 18446744073709552000 ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-12 02:17:27

看一看例如https://en.wikipedia.org/wiki/NaN

IEEE754是用指数字段表示的,指数字段中填充了(如无穷大值)、和一些意义中的非零数和(使它们不同于无穷大值);这种表示允许定义多个不同的NaN值,这取决于在意义中设置了哪些位,但也取决于前导符号位的值(但应用程序不需要为这些不同的NaN值提供不同的语义)。

基本上,你已经创建了一系列的NaNs。

要成功地从Float64Array缓冲区创建uint8array,需要确保缓冲区包含64位浮点数的有效表示形式。

代码语言:javascript
运行
复制
// pixels array is the input
let pixels = new Uint8Array([ 174,71,225,122,20,174,40,64]); // Float64Array([12.34]).buffer
let floatArr = new Float64Array(pixels.buffer) // I 
console.log(floatArr) // 12.34

尽管如此,您可能还是不想使用Float64Array,因为颜色像素值的缓冲区转换不太可能创建任何有意义的数字。(至少在类似于C的情况下,您可能会创建陷阱表示,不确定在JS中是如何处理的)

在评论中,有人建议使用BigUint64Array来绕过NaN和陷阱表示。但我认为这仍然只能在Chrome上使用。

正如凯伊多在下面指出的那样,一个Uint32Array将为每个像素保存你的4个彩色通道,所以除非你试图在你需要成对地集成像素的地方做一些魔术,32位类型的数组就是你想要的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53734684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档