我在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。
返回:缓冲区当前位置的短值
抛出: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);
}
答案 0 :(得分:1)
只需要同样的东西,并且非常失望没有提供答案: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])
你想先得到短路,只需从数组中传递前两个值
const firstShort = getShort(uiArr[1], uiArr[0]) // in my case little endian
const secondShort = getShort(uiArr[3], uiArr[2])