我正在尝试用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 ]
。
答案 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