繁体   English   中英

如何从javascript中的ArrayBuffer获取Short值?

[英]How to get Short value from ArrayBuffer in javascript?

我在Java中有一个ByteBuffer,要从中记下前几个值,它们是:

[-112, -37, 96, -28, -16, -28, -64, -25, 112, -30, -112, -29, 48, -28, 48,
 -30, -48, -28, 32, -27, 80, -31, -112, -29, 80, -31, -96, -28, -96, -28, 
 -112, -30, -96, -30, -16, -27, 16, -28, 48, -27, -64, -32, -112, -30, -32,
 -29, etc ,...]

mybuffer.getShort()这样的代码返回值-9328,-7072等。
并根据Java API:

short java.nio.ByteBuffer.getShort()

读取短值的相对get方法。

读取此缓冲区当前位置的下两个字节,根据当前字节顺序将它们组成一个短值,然后将该位置加2。

返回值:缓冲区当前位置的short值

Throws:BufferUnderflowException-如果此缓冲区中剩余的字节数少于两个。

到这里为止一切都很好,所以问题从这里开始,问题是如果我想在javascript中实现相同的功能,那该怎么做?

我在javascript中使用ArrayBuffer,但是根据Java API,它们进行了一些计算,这非常令人困惑。

这是我的JavaScript代码:

var buf = new ArrayBuffer(res.length); // 2 bytes for each char
var bufView = new Uint16Array(buf); //buf is same as buffer in java ByteBuffer above.

for (var i = 0, strLen = res.length; i < strLen; i++) {
    bufView[i] = res.charCodeAt(i);
}

只是需要同样的东西,而且非常失望,没有提供答案:D

与Scala玩了一会儿,然后跳到Java并最终得到了这个(当然,这符合我的需要,Java的实现有不同的选择。。)

const getShort = (a,b) => a << 8 | b << 0

因此,如果您有一个Uint8Array([1,2,3,4,5,6])

const uiArr = new Uint8Array([1,2,3,4,5,6])

而您想得到第一个short只需传递数组中的前两个值

const firstShort = getShort(uiArr[1], uiArr[0]) // in my case little endian 
const secondShort = getShort(uiArr[3], uiArr[2])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM