JavaScript 如何将十六进制数据字符串转换为 ArrayBuffer
How to convert a hexadecimal string of data to an ArrayBuffer in JavaScript
如何将字符串 'AA5504B10000B5'
转换为 ArrayBuffer
?
您可以将正则表达式与 Array#map
and 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
紧凑型 one-liner 版本:
new Uint8Array('AA5504B10000B5'.match(/../g).map(h=>parseInt(h,16))).buffer
接受的答案在十六进制字符串为空时抛出异常。这是一个更安全的解决方案:
function hex_decode(string) {
let bytes = [];
string.replace(/../g, function (pair) {
bytes.push(parseInt(pair, 16));
});
return new Uint8Array(bytes).buffer;
}
如何将字符串 'AA5504B10000B5'
转换为 ArrayBuffer
?
您可以将正则表达式与 Array#map
and 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
紧凑型 one-liner 版本:
new Uint8Array('AA5504B10000B5'.match(/../g).map(h=>parseInt(h,16))).buffer
接受的答案在十六进制字符串为空时抛出异常。这是一个更安全的解决方案:
function hex_decode(string) {
let bytes = [];
string.replace(/../g, function (pair) {
bytes.push(parseInt(pair, 16));
});
return new Uint8Array(bytes).buffer;
}