[英]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.