首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >尝试用TypedArrays在JavaScript中复制Python的struct.unpack“>L

尝试用TypedArrays在JavaScript中复制Python的struct.unpack“>L
EN

Stack Overflow用户
提问于 2016-08-14 13:44:13
回答 1查看 157关注 0票数 0

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

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

val现在是1296122707 (与0x4d414353相同)。在htk1中尝试相同的方法将得到1752460081,与0x68746b31相同。

我试图将它带到Python中,所以我开始研究,并偶然发现了关于JavaScript的文档: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 ]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-14 14:02:15

下面的函数可以做到这一点(如果字符串的长度不正确,则返回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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38939519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档