如何从十六进制字符串构建二进制数组
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('');
或遍历每个字符。
我对在二进制级别处理数据的概念还很陌生,希望有人能帮我一把...
我想用一系列表示为字符串的十六进制数字构建一个二进制缓冲区。
例如,
假设我有“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('');
或遍历每个字符。