尝试使用TypedArrays

时间:2016-08-14 05:44:13

标签: javascript python

我正在尝试用JavaScript重现以下Python代码。

import struct
val = struct.unpack(">L", "MACS")[0]

val现在是1296122707(与0x4d414353相同)。使用htk1尝试相同1752460081,与0x68746b31相同。

我试图把它带到JavaScript,所以我开始学习并在Python上发现了这个文档:classmethod int.from_bytes()

所以上面的内容与:

相同
int.from_bytes(b"MACS", "big")

但是我无法将其移植到JavaScript。我怎样才能开始这样做,或者它已经在那里可用了?

这是我的尝试:

function unpackL(fourCharCode) {
    var buf = new ArrayBuffer(8);
    var view = new DataView(buf);
    view.setUint8(0, String.charCodeAt(fourCharCode[0]), true);
    view.setUint8(2, String.charCodeAt(fourCharCode[1]), true);
    view.setUint8(4, String.charCodeAt(fourCharCode[2]), true);
    view.setUint8(6, String.charCodeAt(fourCharCode[3]), true);
    return new Uint32Array(buf);
}

但是unpackL('htk1')给了我Uint32Array [ 7602280, 3211371 ]

1 个答案:

答案 0 :(得分:2)

这是一个执行此操作的函数(如果字符串长度错误则返回undefined):

function stringToUnsignedInt(string) {
  if (string.length !== 4) {
    return undefined;
  }

  return (string.charCodeAt(0) << 24) +
         (string.charCodeAt(1) << 16) +
         (string.charCodeAt(2) << 8) +
         string.charCodeAt(3);
}

console.log(stringToUnsignedInt("MACS") === 1296122707); // true
console.log(stringToUnsignedInt("htk1") === 1752460081); // true