JavaScript如何将字符串转为字节数组 等效给定Python代码效果
JavaScript实现与Python代码完全等价的十六进制字符串转字节数组
逻辑对应说明
- Python中
bytearray.fromhex()会自动忽略输入十六进制字符串内的所有空白字符,每2位十六进制字符解析为1个0-255范围的无符号字节,最终得到可变字节数组 - JS中使用
Uint8Array对应Python的bytearray类型,实现逻辑完全对齐Python原生方法的行为,包括异常校验、大小写兼容、空白忽略规则
实现代码
function hexToBytearray(hexStr) { // 移除所有空白字符,对齐Python fromhex自动忽略空格、换行、制表符的行为 const cleanHex = hexStr.replace(/\s+/g, ''); // 对齐Python奇数长度十六进制串的报错逻辑 if (cleanHex.length % 2 !== 0) { throw new Error('Odd-length hex string'); } const byteLen = cleanHex.length / 2; const result = new Uint8Array(byteLen); for (let i = 0; i < byteLen; i++) { // 逐两位解析十六进制,自动兼容大小写 result[i] = parseInt(cleanHex.slice(i * 2, i * 2 + 2), 16); } return result; } // 与Python示例中完全一致的输入字符串 const string2 = '68 03 01 00 22 aa 04 9e 04 4a c2 01 4a 3c 4a c2 01 4a 3c 4a 3c 4a 3c 4a 3c 4a c2 01 4a c2 01 4a 3c 4a 3c 4a c2 01 4a 3c 4a 3c 4a 3c 4a 3c 4a 3c 4a c2 01 4a 3c 4a 3c 4a 3c 4a 3c 4a 3c 49 c2 01 49 c2 01 49 c2 01 4a c2 01 49 c2 01 4a c2 01 4a c2 01 49 c2 01 4a c2 01 4a c2 01 4a c2 01 4a c2 01 4a c2 01 4a c2 01 4a c2 01 4a c2 01 4a c2 01 4a 3c 4a c2 01 4a 3c 4a 3c 4a c2 01 4a c2 01 49 c2 01 4a c2 01 4a 84 05 ab 04 9e 04 4a 3c 49 c3 01 47 3f 47 c5 01 47 c5 01 4a c2 01 4d bf 01 49 3d 48 3d 46 c6 01 44 c8 01 44 42 44 c8 01 47 c5 01 47 c5 01 47 c5 01 47 c5 01 46 3f 46 c6 01 46 c6 01 46 c6 01 46 c6 01 46 c6 01 46 3f 46 30 46 40 46 40 46 40 46 40 46 40 46 40 45 40 46 40 45 40 45 40 45 40 45 43 42 43 42 43 42 43 42 ca 01 42 44 42 ca 01 41 cb 01 41 44 41 44 41 44 41 44 41 45 16'; // 等价于Python的 data1 = bytearray.fromhex(string2) const data1 = hexToBytearray(string2); // 复现Python中循环处理每个字节的逻辑 for (const data of data1) { // 等价于 "{0:02x}".format(data),转为两位小写十六进制字符串 const hexByteStr = data.toString(16).padStart(2, '0'); // 等价于 bytearray.fromhex(hex_byte),生成单字节的字节数组 const hex_byte = hexToBytearray(hexByteStr); // 按需使用hex_byte即可 }
等价性说明
- 解析出的字节数组长度、每个位置的字节值与Python运行结果完全一致
- 支持任意空白分隔的十六进制串,不要求固定单空格分隔
- 自动处理0值等需要补前导零的场景,格式化输出的十六进制串为小写,和Python
02x格式化规则完全对齐
内容的提问来源于stack exchange,提问作者Elroy Tan
相关产品推荐
相关产品推荐

