如何从十六进制字符串构建二进制数组

How to build a binary-array from hex strings

我对在二进制级别处理数据的概念还很陌生,希望有人能帮我一把...

我想用一系列表示为字符串的十六进制数字构建一个二进制缓冲区。

例如,

假设我有“xFCx40xFF”,我想将它变成一个如下所示的数组:111111000100000011111111.

最好的方法是什么?

我的最佳尝试似乎没有奏效:

var raw = "xFCx40xFF"
var end = raw.length-2;
var i = 1;
var j = 0;
var myArray = new Uint8Array(raw.len);
while (i < end) {
    var s = raw.substr(i,2);
    var num = parseInt(s,16);
    i += 3;
    myArray[j] = num;
    j += 8;
}

字符串中每3个字符代表Uint8Array中的1个数字。 Uint8Array 中的每个数字将代表 8 位。您的代码创建的 Uint8Array 比需要的大,然后将值放置在错误的位置。

我已简化代码以使用表示 Uint8Array 中位置的单个索引 i。可以很容易地从 i.

计算出字符串中的相应位置
var raw = "xFCx40xFF"
var myArray = new Uint8Array(raw.length / 3);
for (var i = 0; i < raw.length / 3; i++) {
    var str = raw.substr(3 * i + 1, 2);
    var num = parseInt(str, 16);
    myArray[i] = num;
}

删除十六进制字符串的 'x' 字符,并使用基数 16 调用 parseInt() 并使用基数 2 调用 toString() 以获取二进制文件细绳。

var raw = "xFCx40xFF";
var bin = parseInt(raw.split('x').join(''), 16).toString(2);
document.body.textContent = bin;

如果您需要数组,只需在末尾添加 .split('')。

parseInt(raw.split('x').join(''), 16).toString(2).split('');

或遍历每个字符。