试图复制python的'打开“祝辞L"在JavaScript中使用typedarray

Trying to replicate Python's struct.unpack ">L" in JavaScript with TypedArrays

本文关键字:JavaScript quot typedarray python 复制 打开 祝辞      更新时间:2023-09-26

我正在尝试在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 ]

下面是这样一个函数(如果字符串长度错误则返回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