gpt4 book ai didi

javascript - 在 JavaScript 中将十六进制字符串可靠地转换为字节值

转载 作者:行者123 更新时间:2023-11-29 21:16:00 27 4
gpt4 key购买 nike

我尝试从包含十六进制字节表示的字符串中提取字节值。该字符串还包含需要忽略的(未知)非十六进制字符(分隔符、空格格式)。

给定一个输入字符串 "f5 df 45:f8 a 8 f53",结果将是数组 [245, 223, 69, 248, 168, 245]。请注意,字节值仅从两个十六进制数字输出(因此,最后一个 3 被忽略)。

作为附加约束,代码需要在 ecmascript 3 环境中工作。

到目前为止,我使用的是这种方法:

function parseHex(hex){
hex = hex.replace(/[^0-9a-fA-F]/g, '');
var i,
len = hex.length,
bin = [];
for(i = 0; i < len - 1; i += 2){
bin.push(+('0x' + hex.substring(i, i + 2)));
}
return bin;
}

但是,我觉得有可能找到一个更优雅的解决方案,所以问题是:

这个问题是否有更好的解决方案(性能更好或用更少的代码解决问题)?

最佳答案

更新后的答案 (ES3)

既然你在我原来的回答的评论中提到你仅限于 ES3,那么你应该能够做到这一点:

function parseHex(string) {
// remove all non-hex characters, and then separate them into an array in groups of 2 characters
var arr = string.replace(/[^0-9a-fA-F]/g, '').match(/[0-9a-fA-F]{2}/g);

// mutate the array in-place with the correct decimal values
for(var i = 0; i<arr.length; i++) {
arr[i] = parseInt(arr[i], 16);
}

return arr;
}

parseHex('f5 df 45:f8 a 8 f53'); // => [245, 223, 69, 248, 168, 245]

它基本上会做 map 所做的事情,除了它的空间复杂度低于 map 因为它是在原地改变数组。查看updated jsfiddle .

上一个答案(ES5)

你可以这样做(这里是 jsbin example ):

'f5 df 45:f8 a 8 f53'.replace(/[^0-9a-fA-F]/g, '').match(/[0-9a-fA-F]{2}/g).map(function(hex) {
return parseInt(hex, 16);
});

// => [245, 223, 69, 248, 168, 245]

你可以把它变成这样的函数:

function parseHex(string) {
return string.replace(/[^0-9a-fA-F]/g, '').match(/[0-9a-fA-F]{2}/g).map(function(hex) {
return parseInt(hex, 16);
});
}

parseHex('f5 df 45:f8 a 8 f53');

本质上,您从字符串中删除非十六进制字符,然后匹配两个十六进制字符组(根据您的要求)。 This answer描述了 parseInt(hex, 16) 部分(其中反向将是 hex.toString(16))。

关于javascript - 在 JavaScript 中将十六进制字符串可靠地转换为字节值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39393807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com