试图复制Python的结构解包带有typedarray的JavaScript中的“>L”

2024-09-26 18:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用JavaScript重现下面的Python代码。你知道吗

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

val现在是1296122707(与0x4d414353相同)。对htk1进行同样的尝试会得到1752460081,与0x68746b31相同。你知道吗

我试图把它带到JavaScript中,所以我开始学习并偶然发现了关于Python的文档:^{}。你知道吗

因此,上述内容与:

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 ]。你知道吗


Tags: viewtruenewstringvarvaljavascriptstruct
1条回答
网友
1楼 · 发布于 2024-09-26 18:19:34

下面是一个执行此操作的函数(如果字符串长度错误,则返回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

相关问题 更多 >

    热门问题