如何在 JavaScript 中将十六进制数据字符串转换为 ArrayBuffer

问题描述 投票:0回答:4

如何将字符串

'AA5504B10000B5'
转换为
ArrayBuffer

javascript hex arraybuffer
4个回答
25
投票

您可以将正则表达式与

Array#map
parseInt(string, radix)
:

一起使用

var hex = 'AA5504B10000B5'

var typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) {
  return parseInt(h, 16)
}))

console.log(typedArray)
console.log([0xAA, 0x55, 0x04, 0xB1, 0x00, 0x00, 0xB5])

var buffer = typedArray.buffer


7
投票

紧凑型单线版本:

new Uint8Array('AA5504B10000B5'.match(/../g).map(h=>parseInt(h,16))).buffer

0
投票

如果您不想使用 RegEx,这里有一个解决方案,其性能比已接受的答案高出 2 倍以上。基准测试:https://jsbm.dev/78W3qqvkHVRyU

const decodeHex = (string) => {
    const uint8array = new Uint8Array(Math.ceil(string.length / 2));
    for (let i = 0; i < string.length; i += 2)
        uint8array[i / 2] = Number.parseInt(string.slice(i, i + 2), 16);
    return uint8array;
}
const result = decodeHex("AA5504B10000B5");
console.log(result.constructor.name, result);
enter image description here


-1
投票

当十六进制字符串为空时,接受的答案会引发异常。这是一个更安全的解决方案:

function hex_decode(string) {
    let bytes = [];
    string.replace(/../g, function (pair) {
        bytes.push(parseInt(pair, 16));
    });
    return new Uint8Array(bytes).buffer;
}
© www.soinside.com 2019 - 2024. All rights reserved.